昨天我问了这个问题,得到了超级Chafouin的大力帮助 Java: How to get xml nodes path
然而。我不能在这里使用递归。有没有办法在没有递归的情况下完成同样的工作? 我真的需要帮助。 提前谢谢。
答案 0 :(得分:2)
另一条评论看起来很奇怪,因为它一次又一次地复制相同的逻辑。
如果使用DOM,很难不使用递归。但是,还有其他类型的XML解析器。
你的任务很简单,使用StAX解析器(我相信使用SAX同样简单)。
这个想法很简单:
我认为该指令应该足够清楚,我相信普通程序员应该能够通过上述逻辑找出实际的代码。
答案 1 :(得分:0)
我的看法:
// create a document
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
Document document = domFactory.newDocumentBuilder().parse("input.xml");
// XPath selecting all leaf nodes (assumes all leaf nodes contain a value)
XPath xpath = XPathFactory.newInstance().newXPath();
XPathExpression expr = xpath.compile("//*[count(./descendant::*)=1]");
// list of all nodes containing a value
NodeList list = (NodeList)expr.evaluate(document, XPathConstants.NODESET);
for (int i = 0; i < list.getLength(); i++) {
// store node name and value
Node node = list.item(i);
StringBuilder path = new StringBuilder(node.getNodeName());
String value = node.getTextContent();
// traverse all parents and prepend their names to path
node = node.getParentNode();
while (node.getNodeType() != Node.DOCUMENT_NODE) {
path.insert(0, node.getNodeName() + '.');
node = node.getParentNode();
}
System.out.println(path + " = " + value);
}