如何基于XML节点构建xpath表达式

时间:2014-03-13 11:26:07

标签: java xml xpath groovy

我正在尝试解决存在xml节点的问题,其中我事先不知道内容,但是我想为每个叶元素构造所有相关的xpath。例如:

<parent>
  <child1>
    <subchild1></subchild1>
  </child1>
  <child2>
    <subchild2></subchild2>
  </child2>
</parent>

然后代码将为每个叶子节点拉出相关的xpath,在这种情况下是子节点:

/parent/child1/subchild1
/parent/child2/subchild2

我找了任何图书馆支持,但没找到任何东西。有人有解决方案吗?

1 个答案:

答案 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