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

时间:2012-05-30 09:06:59

标签: java xml sax saxparser

我正在使用Sax解析器来处理预先编写的XML文件....我无法更改XML,因为它由另一个应用程序保存,但需要从中解析数据。 XML文件包含标记     < ERROR_TEXT /> 没有错误发生时为空。 结果,解析器在标记关闭后获取下一个字符“\ n”。 我试过了      result.replaceAll(“\ n”,“”); 和      result.replaceAll(“\ n”,“”);

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

3 个答案:

答案 0 :(得分:1)

SAXParser通过cDAta事件返回characters(),只要遇到'字符'字面,它就会调用该事件。使用该函数是没有意义的,因为它在每个打开的标记之后调用,无论它是否实际包含任何数据。您可以使用String.trim()并在继续之前进行String.length()>=0检查。

答案 1 :(得分:1)

你这样做。如果你有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],值:[easy]

     

键:[ERROR_TEXT](空!)

呼叫流程:startElement() - &gt; characters() - &gt; endElement() - &gt; startElement() - &gt; endElement() - &gt;字符()

就是这样!结束

答案 2 :(得分:0)

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