我昨天问了这个问题,并从 Super Chafouin Java 那里得到了很大的帮助:如何获取 xml 节点路径
然而。我不能在这里使用递归。有没有办法在没有递归的情况下做同样的工作?我真的需要这个帮助。提前致谢。
我昨天问了这个问题,并从 Super Chafouin Java 那里得到了很大的帮助:如何获取 xml 节点路径
然而。我不能在这里使用递归。有没有办法在没有递归的情况下做同样的工作?我真的需要这个帮助。提前致谢。
另一条评论对我来说看起来很奇怪,因为它一次又一次地复制相同的逻辑。
如果您使用的是 DOM,则很难不使用递归。但是,还有其他类型的 XML 解析器。
使用 StAX 解析器可以直接完成您的任务(我相信使用 SAX 同样简单)。
这个想法很简单:
我相信指令应该足够清晰,并且我相信普通程序员应该能够通过上述逻辑找出实际代码。
我的看法:
// 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);
}