SAX:如何获取元素的内容

2024-05-01

我在理解使用 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(使用前将#替换为@)

SAX:如何获取元素的内容 的相关文章

随机推荐