我正在尝试从嵌套的 xml 结构中获取值。我为它使用了多个 for 循环,但它给了我以下异常: “java.lang.NullPointerException:尝试调用从 org.w3c.dom.NodeList.item(int) 返回的空对象的方法 org.w3c.dom.Node.getTextContent() 时”
XML:
<Testing>
<Keys>A11</Keys>
<Details>
<Data>
<FName>K</FName>
<LName>S</LName>
</Data>
<Data>
<FName>U</FName>
<LName>C</LName>
</Data>
</Details>
</Testing>
代码:
NodeList details= doc.getElementsByTagName("Details");
if(details != null && details.getLength() > 0)
{
for(int j = 0; j < details.getLength(); j++)
{
Element serie = (Element) details.item(j);
NodeList data = serie.getElementsByTagName("Data");
for(int z = 0; z < data.getLength(); z++)
{
NodeList LineItem = data.item(z).getChildNodes();
if (LineItem != null && LineItem.getLength() > 0)
{
for (int i = 0; i < LineItem.getLength(); i++)
{
System.out.println("Data");
System.out.println("FName: "
+ doc.getElementsByTagName("FName").item(i).getTextContent());
System.out.println("LName: "
+ doc.getElementsByTagName("LName").item(i).getTextContent());
}
}
}
}
}
预期输出:
Data
FName:K
LName:S
Data
FName:U
LName:C
答案 0 :(得分:0)
问题是您试图从 doc
而不是从 LineItem
中提取 FName 和 LName。
答案 1 :(得分:0)
第一个问题:
NodeList LineItem = data.item(z).getChildNodes();
if (LineItem != null && LineItem.getLength() > 0) {
for (int i = 0; i < LineItem.getLength(); i++) {
System.out.println("Data");
System.out.println("FName: " + doc.getElementsByTagName("FName").item(i).getTextContent());
System.out.println("LName: " + doc.getElementsByTagName("LName").item(i).getTextContent());
}
}
您已经选择了 <Data>
节点,因此您不需要拥有 getAllChildNodes
并再次迭代它们以将它们声明为元素。最重要的是,您正在从 "FName"
中提取 "Lname"
和 doc
,而不是 LineItem
,并且相应的项目编号正在迭代。
但是,您可以简单地执行以下操作而不是我上面提到的块:
Node node = data.item(k);
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element) node;
System.out.println("Data");
System.out.println("FName: " + element.getElementsByTagName("FName").item(0).getTextContent());
System.out.println("LName: " + element.getElementsByTagName("LName").item(0).getTextContent());
}
这将完成您的工作。
第二个问题:
您的 xml
文件有错误的标签 <Fname>
和 in the second
. Which will, anyways lead to the
NullPointerException. So please correct the tags to
and
`