使用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