gpt4 book ai didi

java - 解析 DOM 中不同级别上具有相同名称的标签的 XML

转载 作者:行者123 更新时间:2023-12-01 04:27:30 25 4
gpt4 key购买 nike

我已经研究这个问题好几天了,但找不到解析此 XML 文件的方法。我已经尝试过 XMLPullParser、SAX 和现在的 DOM,但是当我取得一些进展时,我意识到我有两个不同的 <con>标签。我是 Java 和 Android 新手,尤其是 XML 解析新手,因此任何帮助都意义重大。

这是 xml 文件的一部分:

<data>
<con id="f3cVQQjz8jr">
<con idref="nJ4haotQTo0"/>
<added order="9">2013-08-22T03:14:13.439Z</added>
<name>Alex</name>
<rank>0</rank>
</con>
<con id="nJ4haotQTo0">
<added order="10">2013-08-22T03:14:13.439Z</added>
<name>Charley</name>
<rank>-2</rank>
</con>
<con id="jadh7bH25mI">
<added order="11">2013-08-22T03:14:13.439Z</added>
<name>David</name>
<rank>1227133510</rank>
</con>
<con id="erfhZ_dn0HA">
<con idref="nJ4haotQTo0"/>
<added order="12">2013-08-22T03:14:13.439Z</added>
<name>Sebastien</name>
<rank>1073741824</rank>
</con>
</data>

如您所见,并非所有部分都有子项 <con>标签,所以我认为使用计数器不起作用。

这是我的最新尝试(不对嵌套 <con> 标签执行任何操作):

 public void parseContext()
{
NodeList nodeList = doc.getElementsByTagName("con");
int size = nodeList.getLength();
for(int i = 0 ; i < size ; i++)
{


System.out.println("---------------Context ("+i+")--------------------");
Node node = nodeList.item(i);
if(node.getNodeType() == Node.ELEMENT_NODE)
{
Element e = (Element) node;
NodeList resultNodeList = e.getElementsByTagName("name");
int resultNodeListSize = resultNodeList.getLength();
for(int j = 0 ; j < resultNodeListSize ; j++ )
{
Node resultNode = resultNodeList.item(j);
if(resultNode.getNodeType() == Node.ELEMENT_NODE)
{
Element resultE = (Element) resultNode;
System.out.println("Context Name :"+resultE.getTextContent());
}
}
}
}

}

结果是:

---------------Context (0)--------------------
Context Name :Alex
---------------Context (1)--------------------
Context Name :Charley
---------------Context (2)--------------------
---------------Context (3)--------------------
Context Name :David
---------------Context (4)--------------------
Context Name :Sebastien
---------------Context (5)--------------------
...

我想要的是这样的:

---------------Context (0)--------------------
Context Name :Alex
Context ID Ref: duRjfksjf0
---------------Context (1)--------------------
Context Name :Charley
Context ID Ref: null
---------------Context (3)--------------------
Context Name :David
Context ID Ref: null
---------------Context (4)--------------------
Context Name :Sebastien
Context ID Ref: iJ4hasftQTo0
---------------Context (5)--------------------
....

同样,文档要长得多,并且是否存在 idref 之间没有任何模式。 。我最终将解析父 <con> 中的所有数据标签,但如果我知道如何处理 child <con> 我就能弄清楚这一点标签。

我搜索并找到了这个:How to differentiate parent and child tag while dom parsing?尽管没有任何有用的答案。我发现没有问题涉及不同级别上具有相同名称的标签。我知道有很多类似的问题,如果这个问题被删除,我会理解的。不过,我真的很感谢您的帮助。

最佳答案

试试这个...

if(node.getNodeType() == Node.ELEMENT_NODE){
Element e = (Element) node;
NodeList resultNodeList = e.getElementsByTagName("con");

if(!e.hasAttribute("idref")){
if(resultNodeList.getLength() == 2){
Element nameElement = (Element) resultNodeList.item(1);
if(!nameElement.hasAttribute("idref"))
System.out.println("Context ID Ref : "+null);
else
System.out.println("Context ID Ref :"+nameElement.getAttribute("idref"));
}else {
Element nameElement = (Element) resultNodeList.item(0);
if(!nameElement.hasAttribute("idref"))
System.out.println("Context ID Ref : "+null);
else
System.out.println("Context ID Ref :"+nameElement.getAttribute("idref"));
}
}
}

关于java - 解析 DOM 中不同级别上具有相同名称的标签的 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18391388/

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