包装元素组的XPath/XML解析

包装元素组的XPath/XML解析,xml,xpath,Xml,Xpath,这可能很直截了当,但我遗漏了一些东西。。。我有一个XElement,我需要在其中查找特定元素的组,并为该组插入一个新的父元素 即,在下面的示例中,我需要创建一个新元素,并将其作为z元素组的父元素添加到树中- <x> <z /> <z /> <z /> </x> 变成: <x> <y> <z /> <z />

这可能很直截了当,但我遗漏了一些东西。。。我有一个XElement,我需要在其中查找特定元素的组,并为该组插入一个新的父元素

即,在下面的示例中,我需要创建一个新元素,并将其作为z元素组的父元素添加到树中-

<x>
    <z />
    <z />
    <z />
</x>

变成:

<x>
    <y>
        <z />
        <z />
        <z />
    </y>
</x>

Z元素之间不会有任何其他元素,但xml中可能有多个连续元素的实例

如果可能的话,我宁愿避免使用XSLT来操作数据


有什么建议吗?

您仍然需要使用一些东西(DOM/XSLT/etc)来修改文档或输出新文档

话虽如此,您可以通过首先针对组的
元素(从而遍历组),然后将其和组内的其他元素包装来解决问题

  • //z[not(前面的同级::z)]
    将为您提供所有没有前面同级的
    元素,因此您拥有组中的第一个元素(返回的元素数为组数)

  • 元素中使用DOM/other包装该元素

  • 包装组中的其他元素。在第一个
    元素上,使用
    后面的兄弟::z
    获取组的元素2到N


  • 您仍然需要使用一些东西(DOM/XSLT/etc)来修改文档或输出新文档

    话虽如此,您可以通过首先针对组的
    元素(从而遍历组),然后将其和组内的其他元素包装来解决问题

  • //z[not(前面的同级::z)]
    将为您提供所有没有前面同级的
    元素,因此您拥有组中的第一个元素(返回的元素数为组数)

  • 元素中使用DOM/other包装该元素

  • 包装组中的其他元素。在第一个
    元素上,使用
    后面的兄弟::z
    获取组的元素2到N


  • XPath只能访问现有文档,不能创建新文档

    可用于创建新文档的技术包括XSLT、XQuery、Linq等


    在不知道为什么不想使用XSLT的情况下,很难回答这个问题,对于我们中的许多人来说,XSLT是一种显而易见的最简单的方法。

    XPath只能访问现有文档,不能创建新文档

    可用于创建新文档的技术包括XSLT、XQuery、Linq等


    在不知道为什么不想使用XSLT的情况下回答这个问题是很困难的,对于我们中的许多人来说,XSLT显然是最简单的方法。

    1。你在XPath中的意思是什么?您可以使用XPath检查组,但仍然需要DOM/XSLT/other来修改和生成输出文档。2.你所说的“组”到底是什么意思(一个元素,更多的元素,在这些元素之间能有其他元素吗?)对不起,我的问题有一半没有回答。将编辑我的原始帖子1。你在XPath中的意思是什么?您可以使用XPath检查组,但仍然需要DOM/XSLT/other来修改和生成输出文档。2.你所说的“组”到底是什么意思(一个元素,更多的元素,在这些元素之间能有其他元素吗?)对不起,我的问题有一半没有回答。编辑我的原始帖子真的只是个人喜好——我更喜欢使用Linq或XQuery。考虑到我受限于xsl 1.0,从我所看到的情况来看,它变得相当详细。当您复制大部分数据时,XSLT解决方案通常比XQuery解决方案更简洁。然而,XSLT2.0解决方案的长度通常是1.0解决方案的一半,这是事实。我很惊讶Linq可以在XSLT2.0没有的平台上使用。实际上,这只是个人偏好——我更喜欢使用Linq或XQuery。考虑到我受限于xsl 1.0,从我所看到的情况来看,它变得相当详细。当您复制大部分数据时,XSLT解决方案通常比XQuery解决方案更简洁。然而,XSLT2.0解决方案的长度通常是1.0解决方案的一半,这是事实。我很惊讶Linq可以在XSLT2.0没有的平台上使用。