我在java中解析一些XML时遇到了一些麻烦。我的XML文件被正确读取,并且我能够使用节点的getTextContent()函数从文件中获取大部分信息(例如,在xml片段中显示的StreamType节点)。
但是,当我尝试使用节点的子节点时,getNodeValue()和getTextContent()都返回此随机值:“\ n \ t \ t”。
NodeList propertyNodes似乎已正确填充(包含所有18个“Property”元素)。
以下是我的代码中的代码段:
Document document;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
document = builder.parse(appXML);
...
String typeName = document.getElementsByTagName("StreamType").item(0).getTextContent();
...
String limit = "-1";
NodeList propertyNodes = document.getElementsByTagName("Property");
int nodelistlength = propertyNodes.getLength();
for (int i = 0; i < nodelistlength; i++) {
Node currentNode = propertyNodes.item(i);
Node nameNode = currentNode.getFirstChild();
Node valueNode = currentNode.getLastChild();
String name = nameNode.getNodeValue();
String value = valueNode.getNodeValue();
if (nameNode.getTextContent().equalsIgnoreCase("maxConnections"))
limit = valueNode.getTextContent();
}
这里有一些来自我试图解析的XML的剪辑:
<Root>
<Application>
<Streams>
<StreamType>live</StreamType>
...
</Streams>
...
<Properties>
...
<Property>
<Name>maxConnections</Name>
<Value>1000</Value>
</Property>
...
</Properties>
</Application>
</Root>
知道我在这里做错了什么吗?非常感谢!
编辑:现在可以使用,感谢@home发布的教程。这就是我修复代码的方法:
1)修改了以“字符串限制”开头并以for循环结束括号结尾的代码块:
String limit = "-1";
NodeList propertyNodes = document.getElementsByTagName("Property");
for (int i = 0; i < propertyNodes.getLength(); i++) {
Node currentNode = propertyNodes.item(i);
if (currentNode.getNodeType() != Node.ELEMENT_NODE)
continue;
Element currentElement = (Element)currentNode;
if (getTagValue("Name",currentElement).equalsIgnoreCase("maxConnections"))
limit = getTagValue("Value",currentElement);
}
2)在教程中添加了这个方便的功能:
private static String getTagValue(String sTag, Element eElement) {
NodeList nlList = eElement.getElementsByTagName(sTag).item(0).getChildNodes();
Node nValue = (Node) nlList.item(0);
return nValue.getNodeValue();
}
现在可以完美地获取“Properties”元素的子名称/值对。非常感谢!
答案 0 :(得分:8)
答案 1 :(得分:3)
这是节点值的正确内容。
<a>
<b>
stuff
</b>
</a>
a
节点的值(在本例中等于文本内容)正确地由开始和结束标记之间的空格组成,当然省略了b
标记中的空格因为那,它属于b
标签,而不属于a
。