我在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();
}
Run Code Online (Sandbox Code Playgroud)
这里有一些来自我试图解析的XML的剪辑:
<Root>
<Application>
<Streams>
<StreamType>live</StreamType>
...
</Streams>
...
<Properties>
...
<Property>
<Name>maxConnections</Name>
<Value>1000</Value>
</Property>
...
</Properties>
</Application>
</Root>
Run Code Online (Sandbox Code Playgroud)
知道我在这里做错了什么吗?非常感谢!
编辑:现在工作,感谢@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);
}
Run Code Online (Sandbox Code Playgroud)
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();
}
Run Code Online (Sandbox Code Playgroud)
它现在可以完美地获取"Properties"元素的子名称/值对.非常感谢!
遗憾的是,Java DOM并不那么容易使用.您必须区分不同的节点类型.不是最好的教程,但这是我刚用谷歌发现的:http://mkyong.com/java/how-to-read-xml-file-in-java-dom-parser
| 归档时间: |
|
| 查看次数: |
36678 次 |
| 最近记录: |