我正在使用 Sax 解析器来处理预先编写的 XML 文件....我无法更改 XML,因为它由另一个应用程序持有,但需要从中解析数据。XML 文件包含一个标签 < ERROR_TEXT/> ,当没有发生错误时该标签为空。结果,解析器在标记关闭之后获取下一个字符,即“\n”。我试过 result.replaceAll("\n", ""); 和 result.replaceAll("\n", "");
如何让 SAX 识别这是一个空标记并将值返回为 "" ?
你做吧。如果你有 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](空!!!)
调用流程:startElement() -> characters() -> endElement() -> startElement() -> endElement() -> characters()
而已!结束
SAXParser
当它遇到字面上cDAta
的“字符”时,它会通过characters()
它调用的事件返回。使用该函数是没有意义的,因为它在每个打开的标签之后调用,无论它是否实际包含任何数据。在继续之前,您可以使用并进行检查。String.trim()
String.length()>=0
你没有。SAX 的工作是解析数据,而不是决定数据的内容应该是什么。在您的 parseHandler 中,将数据字符串存储在所有元素中,然后在处理该元素时,对数据执行 string.trim()。如果它的输出为空白并且您的标签是 ERROR_TEXT 标签,则您知道没有错误。