gpt4 book ai didi

java - 如果Java中另一个标签内存在同名的其他标签,如何提取XML文件中的特定标签内容?

转载 作者:行者123 更新时间:2023-12-02 11:03:41 25 4
gpt4 key购买 nike

目前,我正在使用 DOM 在 Java 中解析 XML 文件。但是我遇到了一个问题,如果另一个标签内存在同名的其他标签,如何从 XML 文件中提取特定标签内容,如下所示:

<file>
<sub-file>
<a> ....</a>
<b> ....</b>
<c> ....</c>
</sub-file>

<a> ..... some data here ....</a>
<b> ..... some data here ....</b>
<c> ..... some data here ....</c>

<image>
<a> ....</a>
<b> ....</b>
<c> ....</c>
</image>
</file>

那么我如何提取不在另一个(子文件或图像内)内的 a、b、c 标签?到目前为止我尝试过这段代码:

    File xmlfile=new File(path);
factory = DocumentBuilderFactory.newInstance();
builder= factory.newDocumentBuilder();
document= builder.parse(xmlfile);
document.getDocumentElement().normalize();
filelist= document.getElementsByTagName("file");
for(int o=0;o<filelist.getLength();o++)
{
Node nNode = filelist.item(o);

if (nNode.getNodeType() == Node.ELEMENT_NODE)
{

Element element = (Element) nNode;
for (int a=0; a<element.getElementsByTagName("file").getLength(); a++)
{

tagA=element.getElementsByTagName("a").item(a).getTextContent();

tagB=element.getElementsByTagName("b").item(a).getTextContent();

tagC=element.getElementsByTagName("c").item(a).getTextContent();

}
}
}// loop
}

此代码将所有标签 a、b、c 打印 3 次(文件内、子文件和图像)。

最佳答案

不要使用getElementsByTagName()。相反,您可以自己导航 DOM 树:

Node fileNode = filelist.item(o);
for (Node child = fileNode.getFirstChild(); child != null; child = child.getNextSibling()) {
if (child.getNodeType() == Node.ELEMENT_NODE) {
switch (child.getNodeName()) {
case "a":
tagA = child.getTextContent();
break;
case "b":
tagB = child.getTextContent();
break;
case "c":
tagC = child.getTextContent();
break;
default:
// ignore
}
}
}

作为替代方案,您还可以考虑使用 XPath:

XPathFactory xpathFactory = XPathFactory.newInstance();
XPath xpath = xpathFactory.newXPath();

tagA = xpath.evaluate("a", fileNode);
tagB = xpath.evaluate("b", fileNode);
tagC = xpath.evaluate("c", fileNode);

关于java - 如果Java中另一个标签内存在同名的其他标签,如何提取XML文件中的特定标签内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51143759/

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