使用XPath 2.0选择节点并保持源XML文档的层次结构

时间:2015-08-03 09:00:40

标签: xpath xpath-2.0

是否可以使用 XPath 2.0表达式来选择节点并保持源XML文档的层次结构?

示例源XML实例文档:

<persons>
      <person name='Joe' age='26'>
            <project name='dom4j' language='java'/>
            <project name='underscore' language='javascript'/>
            <project name='ember' language='javascript'/>
      </person>
      <person name='Jane' age='23'>
            <project name='dom4j' language='java'/>
      </person>
      <person name='Kevin' age='15'>
            <project name='myMMORPG' language='php'/>
            <project name='struts2' language='java'/>
      </person>
</persons>

所以我想得到一个纯XPath表达式的结果,如:

<persons>
    <person name='Joe' age='26'>
        <project name='dom4j' language='java'/>
    </person>
    <person name='Jane' age='23'>
        <project name='dom4j' language='java'/>
    </person>
</persons>

这很容易与XSLT有关,但我很好奇,如果可以通过 XPath 2.0表达式实现这一点。我不相信,因为我知道XPath本身没有创建新节点的表达式。有人可以证实这一点吗?

1 个答案:

答案 0 :(得分:0)

关于你的问题&#34;是否可以使用纯XPath 2.0表达式来选择节点并保持源XML文档的层次结构?&#34;,我会回答是的,你用XPath做的选择2.0返回原始输入文档中的节点,完整的结构未被更改,这意味着所选节点将其保留为子节点,祖先和兄弟节点。然而,你想要的结果似乎确实只想保留儿童和祖先,而不是兄弟姐妹。要实现这一点,您确实需要XSLT或XQuery并返回仅包含您感兴趣的节点的新文档。