我正在尝试解决存在xml节点的问题,其中我事先不知道内容,但是我想为每个叶元素构造所有相关的xpath。例如:
<parent>
<child1>
<subchild1></subchild1>
</child1>
<child2>
<subchild2></subchild2>
</child2>
</parent>
然后代码将为每个叶子节点拉出相关的xpath,在这种情况下是子节点:
/parent/child1/subchild1
/parent/child2/subchild2
我找了任何图书馆支持,但没找到任何东西。有人有解决方案吗?
答案 0 :(得分:1)
这是我在groovy中一起攻击的解决方案:
def xml = new XmlSlurper().parseText("""<parent><child1><subchild1></subchild1></child1><child2><subchild2></subchild2></child2></parent>""")
def buildXPathFromParents = {
if (it.parent().is(it)) {"/" + it.name() } // If we are our own parent, then we are the highest node, so return our name.
else {call(it.parent())+ "/" + it.name() } // if we have a parent node, append our path to its path.
}
def endNodes = xml.depthFirst().findAll{!it.childNodes()} // find all nodes which dont have any children
def xPaths = endNodes.collect{buildXPathFromParents(it)}
print xPaths
Groovy4lyf