1

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

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

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

变成:

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

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

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

有什么建议么?

4

2 回答 2

1

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

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

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

于 2012-10-30T07:05:25.983 回答
0

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

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

  1. //z[not(preceding-sibling::z)]会给你所有<z/>没有前兄弟的元素<z/>,所以你在组中是第一个(返回的元素数是组数)。

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

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

于 2012-10-30T06:32:10.293 回答