2012-10-30 69 views
1

這可能是非常簡單的,但我錯過了一些東西......我有一個XElement,在這個XElement中我需要找到特定元素的組並插入一個新的父元素爲小組。XPath/XML解析來包裝元素組

即,在下面的例子中,我需要創建一個新元素,並將其添加到樹作爲基團Z元素的父 -

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

變爲:

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

Z元素之間不會有任何其他元素,但xml中可能有多個連續元素的實例。

如果可能,我寧願避免使用XSLT來操縱數據。

有什麼建議嗎?

+0

1.您在XPath中的含義是什麼?您可以使用XPath檢查組,但仍然需要DOM/XSLT/other來修改並生成輸出文檔。 2.你的意思是什麼「組」(一個元素,更多的元素,之間可以有其他元素嗎?) –

+0

對不起 - 我的一半問題退出了。將編輯我的原始文章 – Nathan

回答

0

您仍然必須使用某些東西(DOM/XSLT/etc)來修改文檔或輸出一個新文檔。

話雖如此,您可以通過定位一個組的第一個<z/>元素(因此通過組),然後將它和組中的其他元素進行包裝來解決問題。

  1. //z[not(preceding-sibling::z)]會給你不具有前同輩(S)<z/><z/>所有元件,所以你必須在第一組(和返回的元素的數量是組的數目)。

  2. 在您的<y>元素中使用DOM/other包裝該元素。

  3. 包裝組中的其他元素。在第一個<z/>元素上使用following-sibling::z來獲取元素2到N的組。

1

XPath只能訪問現有文檔,因此無法創建新文檔。

技術,你可以用它來創建一個新文檔包括XSLT,XQuery中,LINQ的,等等

這是很難回答的問題不知道你爲什麼不想使用XSLT,這對於我們許多人是做到這一點的最明顯和最簡單的方法。

+0

只是個人喜好 - 我寧願使用Linq或XQuery。鑑於我受限於xsl 1.0,從我看到的它變得非常詳細 – Nathan

+0

那麼,當您不更改大部分數據時,XSLT解決方案通常比XQuery解決方案更簡潔。但是,確實XSLT 2.0解決方案的長度通常是1.0版本的一半。我很驚訝Linq在XSLT 2.0沒有的平臺上可用。 –