1
我的XML(从调用Java中的PowerShell命令创建):我想显示名称,DisplayVersion和Publisher值到变量的Java:子节点值均为空
<?xml version="1.0" encoding="UTF-8"?>
-<Objects>
-<Object>
<Property Name="DisplayName">Adobe AIR</Property>
<Property Name="DisplayVersion">27.0.0.124</Property>
<Property Name="Publisher">Adobe Systems Incorporated</Property>
<Property Name="InstallDate"/>
</Object>
,但是我得到空值和#文本值由归国:
try {
DocumentBuilderFactory dBF = DocumentBuilderFactory.newInstance();
DocumentBuilder dB = dBF.newDocumentBuilder();
Document doc = dB.parse(new File(filename));
NodeList nodeList = doc.getElementsByTagName("Object");
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element e = (Element)node;
System.out.println("Node " + count.toString());
NodeList childNodeList = e.getChildNodes();
for (int j = 0; j < childNodeList.getLength() ; j++) {
Node childNode = childNodeList.item(j);
System.out.print("Child Node Type: " + childNode.getNodeType() + " - ");
System.out.print("Child Element Name: " + childNode.getNodeName() + " - ");
System.out.println("Element Value: " + childNode.getNodeValue());
}
count++;
}
}
此代码返回此输出存在于我的XML文件中的所有节点123:
Node 0
Child Node Type: 3 - Child Element Name: #text - Element Value:
Child Node Type: 1 - Child Element Name: Property - Element Value: null
Child Node Type: 3 - Child Element Name: #text - Element Value:
Child Node Type: 1 - Child Element Name: Property - Element Value: null
Child Node Type: 3 - Child Element Name: #text - Element Value:
Child Node Type: 1 - Child Element Name: Property - Element Value: null
Child Node Type: 3 - Child Element Name: #text - Element Value:
Child Node Type: 1 - Child Element Name: Property - Element Value: null
Child Node Type: 3 - Child Element Name: #text - Element Value:
我一直在寻找如何读取格式与我的格式一样的XML文件的例子,我真的很难与我非常有限的Java知识挣扎。任何帮助赞赏。
谢谢你,吉姆加里森!虽然我的子节点名称仍然是'#text',但这些值仍在流动,这就是我需要通过这个过程来完成的一切。 –
文本节点将_always_命名为'#text',这就是DOM的工作方式。查看[org.w3c.dom.Node](https://docs.oracle.com/javase/8/docs/api/org/w3c/dom/Node.html)顶部附近的表格,以查看不同节点类型的名称和值是。 –
然后如何识别子节点名称?例如,知道我正在检索的值与DisplayName有关吗?如果我尝试使用getAttributes(),[即System.out.println(“Name:”+ subNode.getAttributes()。getNamedItem(“DisplayName”)。getNodeName()+“ - ”);]我得到一个运行时错误(NullPointerException)。 –