gpt4 book ai didi

java - SAX:如何获取元素的内容

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:41:45 24 4
gpt4 key购买 nike

我在理解使用 SAX 解析 XML 结构时遇到了一些困难。假设有以下 XML:

<root>
<element1>Value1</element1>
<element2>Value2</element2>
</root>

和一个字符串变量myString

只需完成方法 startElement、endElement() 和 characters() 就很容易了。但我不明白如何实现以下目标:

如果当前元素等于 element1,则将其值 value1 存储在 myString 中。据我所知,没有什么比:

if (qName.equals("element1")) myString = qName.getValue();

我想我只是想得太复杂了:-)

罗伯特

最佳答案

此解决方案适用于具有文本内容的单个元素。当 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)));

关于java - SAX:如何获取元素的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4119870/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com