gpt4 book ai didi

java - 使用dom java解析xml

转载 作者:行者123 更新时间:2023-11-29 05:15:53 26 4
gpt4 key购买 nike

我有下面的 xml:

<modelingOutput>
<listOfTopics>
<topic id="1">
<token id="354">wish</token>
</topic>
</listOfTopics>
<rankedDocs>
<topic id="1">
<documents>
<document id="1" numWords="0"/>
<document id="2" numWords="1"/>
<document id="3" numWords="2"/>
</documents>
</topic>
</rankedDocs>
<listOfDocs>
<documents>
<document id="1">
<topic id="1" percentage="4.790644689978203%"/>
<topic id="2" percentage="11.427632949428334%"/>
<topic id="3" percentage="17.86913349249596%"/>
</document>
</documents>
</listOfDocs>
</modelingOutput>

Ι 想要解析此 xml 文件并从 ListofDocs 获取主题 id百分比

第一种方法是从 xml 中获取所有文档元素,然后检查祖父节点是否为 ListofDocs。但是元素文档存在于 rankedDocslistOfDocs 中,所以我有一个非常大的列表。

所以我想知道是否存在更好的解决方案来解析此 xml 以避免 if 语句?

我的代码:

public void parse(){
Document dom = null;
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
InputSource is = new InputSource(new StringReader(xml));

dom = db.parse(is);

Element doc = dom.getDocumentElement();
NodeList documentnl = doc.getElementsByTagName("document");
for (int i = 1; i <= documentnl.getLength(); i++) {
Node item = documentnl.item(i);
Node parentNode = item.getParentNode();
Node grandpNode = parentNode.getParentNode();
if(grandpNode.getNodeName() == "listOfDocs"{
//get value
}
}
}

最佳答案

首先,在检查节点名称时,您不应该使用 == 来比较 String。始终使用 equals 方法。

您可以使用 XPath 仅评估 listOfDocs 下的文档 topic 元素:

XPathFactory xPathFactory = XPathFactory.newInstance();
XPath xPath = xPathFactory.newXPath();
XPathExpression xPathExpression = xPath.compile("//listOfDocs//document/topic");

NodeList topicnl = (NodeList) xPathExpression.evaluate(dom, XPathConstants.NODESET);
for(int i = 0; i < topicnl.getLength(); i++) {
...

关于java - 使用dom java解析xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26556878/

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