使用 XPath 2.0 到 select 个节点并保持源 XML 文档的层次结构

Using XPath 2.0 to select nodes and keep hierarchical structure of source XML document

是否可以对 select 个节点使用 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 很容易做到这一点,但我很好奇,如果完全有可能使用 pure XPath 2.0 表达式来实现这一点。我不相信,因为我知道 XPath 本身没有创建新节点的表达式。有人可以确认吗?

至于你的问题"Is it possible to use pure XPath 2.0 expression to select nodes and keep hierarchical structure of source XML document?",我的回答是肯定的,你在原始输入文档中使用 XPath 2.0 returns 节点所做的选择,完整的结构没有改变,意味着选定的节点保留它 children、祖先和兄弟姐妹。但是,您想要的结果似乎确实只想保留 children 和祖先,而不是兄弟姐妹。为此,您确实需要 XSLT 或 XQuery 和 return 仅包含您感兴趣的节点的新文档。