我正在使用Sax解析器来处理预先编写的XML文件....我无法更改XML,因为它由另一个应用程序保存,但需要从中解析数据。 XML文件包含标记 < ERROR_TEXT /> 没有错误发生时为空。 结果,解析器在标记关闭后获取下一个字符“\ n”。 我试过了 result.replaceAll(“\ n”,“”); 和 result.replaceAll(“\ n”,“”);
如何让SAX识别出这是一个空标记并将值返回为“”?
答案 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标记,则表示没有错误。