gpt4 book ai didi

Java XML Parser——如何收集或统计某个标签

转载 作者:行者123 更新时间:2023-12-01 22:43:49 27 4
gpt4 key购买 nike

我正在尝试解析一个简单的 XML 文件。如果我有一个下面的 XML 字符串,

<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

我只想从 <body> 中提取字符串…</body> 。我正在使用 SAXParser 和默认处理程序。我通过在 DefaultHandler 的“characters”方法中显式添加打印语句,成功打印出了标签中的所有字符串。但我不确定在哪里、什么调用这个字符方法,以及如何控制它。

我知道如何在startElement中找到某个标签,但是如何从startElement中的标签中提取字符串?

最佳答案

根据 SAX,默认处理程序文档,

public void characters(char[] ch,
int start,
int length)
throws SAXException

The Parser will call this method to report each chunk of character data. SAX parsers may return all contiguous character data in a single chunk, or they may split it into several chunks; however, all of the characters in any single event must come from the same external entity so that the Locator provides useful information.

因此,解析器可能会对元素内的特定文本调用一次或多次字符方法,比如“这个周末别忘记我!”,直到读取整个文本。

注意:

The application must not attempt to read from the array outside of the specified range.

下面的代码显示了如何收集单个 XML 元素内的文本。

boolean isTagInScope = false;
StringBuilder elementContent = new StringBuilder();
public void startElement(String namespaceURI, String lName, String qName,
Attributes attributes) throws SAXException
{
isTagInScope = true;
}

public void endElement(String namespaceURI, String sName, String qName)
throws SAXException throws SAXException {
isTagInScope = false;
}

public void characters(char[] arg0, int arg1, int arg2) throws SAXException {
if(isTagInScope)
{
String content = new String(arg0, arg1, arg2);
elementContent.append(content);
}
}

“elementContent”变量将保存元素的开始标签和结束标签之间的整个内容。

关于Java XML Parser——如何收集或统计某个标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25670757/

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