我已經看過以前在stackoverflow和XPath參考和教程中回答的問題,但我沒有看到任何與我的場景完全匹配的東西。如果已經提出了這個問題,或者我忽略了一個微不足道的答案,可以提前道歉。 (另外,爲了使其更容易理解,我簡化了一些情況,主要的一點是我無法以編程方式瀏覽XML文檔,並且出於我在最後描述的原因需要單行XPath解決方案。)用它的祖先節點/標籤包裝一個XML元素
我正在使用一個如下所示的XML模式。 (這是我必須原樣使用。)
<Root>
<!-- Child 1 -->
<Child>
<Name>Joe</Name>
<Age>12</Age>
</Child>
<!-- Child 2 -->
<Child>
<Name>Mike</Name>
<Age>25</Age>
</Child>
<!-- Child 3 -->
<Child>
<Name>Jane</Name>
<Age>20</Age>
</Child>
</Root>
假設我已經在「喬」節點,我需要定義一個XPath查詢,將(即內兒童1 Name要素) 「包裝」該節點如下:
<Root>
<!-- Child 1 -->
<Child>
<Name>Joe</Name>
<Age>12</Age>
</Child>
</Root>
我已經試過祖先的各種組合,串加入,CONCAT等,但似乎無法說,「包裝」的元素正確地找到解決方案。 (我使用的祖先的方式是返回所有子節點,例如,這不是我所需要的。)
其他注意事項:(1)解決方案必須是單行XPath查詢,if這是可能的(由於下面給出的原因)。 (2)它必須足夠通用,可以用於任何子元素(例如,它不能假定我總是處於第一或第二或第三個孩子)。 (3)從上面的例子中,你可以看到我實際上並不需要實際的Root節點,只是它的標籤(即我不希望所有的Child節點在它下面)。但是,我確實需要實際的子節點(以便獲得名稱和年齡)。
注:對於它的價值,我實際上無法以編程方式導航XML。我正在使用一個庫(其代碼無法更改),我必須根據配置文件中的單行XPath查詢來定義所有內容。它基本上會瀏覽所有的Name元素,所以我的解決方案必須從這一點開始。
在此先感謝。
由於聲明`xpath`的wiki標籤(也取自規範):* XPath的主要目的是解決XML文檔的部分問題* **它不會序列化新文檔**,相反XQuery和XSLT。 – 2011-02-08 23:20:51
好問題,+1。請參閱我的答案,瞭解爲什麼無法單獨使用XPath來完成此操作。 – 2011-02-08 23:52:14