使用Sax Parser,Java处理XML中的空标签

我使用Sax解析器来处理预先编写的xml文件....我没有办法改变xml,因为它由另一个应用程序持有,但需要从它解析数据。 Xml文件包含一个Tag <ERROR_TEXT />,当没有错误发生时它是空的。 结果解析器在标签关闭之后的下一个字符是“ n”。 我已经尝试过result.replaceAll(“ n”,“”); 和result.replaceAll(“ n”,“”);

如何让sax识别这是一个空标签并将值返回为“”?


你没有。 SAX的工作是解析数据,而不是决定数据的内容应该是什么。 在您的parseHandler中,将数据字符串存储在您的所有元素中,并且在处理该元素时,对数据执行一个string.trim()。 如果那个输出是空白的而你的标签是一个ERROR_TEXT标签,你就知道没有错误。


SAXParser通过characters()遇到“字符”时调用的characters()事件返回cDAta 。 使用该函数毫无意义,因为它在每个打开的标记之后被调用,而不管它是否实际包含任何数据。 您可以使用String.trim()并在继续之前执行String.length()>=0检查。


你做吧。 如果你有xml和Java源码打击。

<ERROR_TEXT>easy</ERROR_TEXT><ERROR_TEXT/>

Java代码

private boolean isKeySet = false;
private String key = "";
@Override
public void characters(
    char[] ch,
    int start,
    int length
) throws SAXException
{
    if (!isKeySet) {
        return;
    }
    isKeySet = false;
    logger.debug("key : [" + key + "], value : [" + value + "]");
}
@Override
public void startElement(
    String uri,
    String localName,
    String qName,
    Attributes attrs
) throws SAXException
{
    key = qName;
    isKeySet = true;
}

@Override
public void endElement(
    String uri,
    String localName,
    String qName
) throws SAXException
{
    if (isKeySet) {
        isKeySet = false;
        logger.debug("key : [" + key + "](EMPTY!!!)");
    }
}

结果日志:

键:[ERROR_TEXT],值:[简单]

键:[ERROR_TEXT](EMPTY !!!)

调用流程:startElement() - > characters() - > endElement() - > startElement() - > endElement() - > characters()

而已! 结束

链接地址: http://www.djcxy.com/p/34913.html

上一篇: Handling Empty Tags in XML using Sax Parser, Java

下一篇: XML parsing with SAX: how to handle html as text within xml