XPath / XML解析以包装元素组

时间:2012-10-30 06:06:24

标签: xml xpath

这可能非常简单,但我遗漏了一些东西......我有一个XElement,我需要在其中找到一个特定元素的组并为该组插入一个新的父元素。

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

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

变为:

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

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

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

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

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

您可以用来创建新文档的技术包括XSLT,XQuery,Linq等。

如果不知道为什么不想使用XSLT,很难回答这个问题,对于我们中的许多人来说,这是最明显和最简单的方法。

答案 1 :(得分:0)

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

话虽如此,您可以通过定位组的第一个<z/>元素(从而遍历组)然后将其包装在组内的其他元素来解决问题。

  1. //z[not(preceding-sibling::z)]将为您提供所有<z/>个没有前兄弟<z/>的元素,因此您拥有第一个组(并且返回的元素数是数字小组)。

  2. 使用<y>元素中的DOM / other包裹该元素。

  3. 包装组中的其他元素。在第一个<z/>元素上使用following-sibling::z来获取组中的元素2到N.