我在理解使用 SAX 解析 XML 结构时遇到了一些困难。假设有以下 XML:
<root>
<element1>Value1</element1>
<element2>Value2</element2>
</root>
和一个字符串变量myString
.
只需使用startElement、endElement() 和characters() 方法就很容易了。但我不明白如何实现以下目标:
如果当前元素等于element1
储存它的价值value1
in myString
。据我了解,没有什么是这样的:
if (qName.equals("element1")) myString = qName.getValue();
我想我只是想得太复杂了:-)
Robert
该解决方案适用于具有文本内容的单个元素。当 element1 有更多子元素时,需要做更多的工作。布莱恩的话非常重要。
当您有多个元素或想要更通用的解决方案时,这可能会对您有所帮助。我用 300+MB 的 xml 文件对其进行了测试,它仍然非常快:
final StringBuilder builder=new StringBuilder();
XMLReader saxXmlReader = XMLReaderFactory.createXMLReader();
DefaultHandler handler = new DefaultHandler() {
boolean isParsing = false;
public void startElement(String uri, String localName, String qName, Attributes attributes) {
if ("element1".equals(localName)) {
isParsing = true;
}
if (isParsing) {
builder.append("<" + qName + ">");
}
}
@Override
public void characters(char[] chars, int i, int i1) throws SAXException {
if (isParsing) {
builder.append(new String(chars, i, i1));
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if (isParsing) {
builder.append("</" + qName + ">");
}
if ("element1".equals(localName)) {
isParsing = false;
}
}
};
saxXmlReader.setContentHandler(handler);
saxXmlReader.setErrorHandler(handler);
saxXmlReader.parse(new InputSource(new FileInputStream(input)));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)