2012-07-24 70 views
0
選擇父

我的XML結構如下:的XPath如何根據孩子

<A> 
    <B> 
     <C> 
      <D> 
       <E>1</E> 
       <F>123</F> 
      </D> 

      <D> 
       <E>1</E> 
       <F>153</F> 
      </D> 
     </C> 

     <C> 
      <D> 
       <E>1</E> 
       <F>134</F> 
      </D> 
     </C> 
    </B> 

    <B> 
     <C> 
      <D> 
       <E>2</E> 
       <F>133</F> 
      </D> 
     </C> 

     <C> 
      <D> 
       <E>2</E> 
       <F>134</F> 
      </D> 
     </C> 
    </B> 
</A> 

我想知道是否有可能讓所有「B」元素(及其內容),他們的˚F元素具有特定的值,我們假設在這種情況下爲134。但是,我不想讓其他C元素一起 - 所以對於這個例子,我很樂意得到:

<A> 
    <B> 
     <C> 
      <D> 
       <E>1</E> 
       <F>134</F> 
      </D> 
     </C> 
    </B> 

    <B> 
     <C> 
      <D> 
       <E>2</E> 
       <F>134</F> 
      </D> 
     </C> 
    </B> 
</A> 

這甚至可能嗎?我一直在玩xpath,但我得到的唯一東西是B元素所有其內容(不僅與所需的F元素)與以下xpath: // D [F = 134] /父:: C /父:: B

謝謝你在前進, 馬辛

+2

你真的不想*選擇帶有'XPath'的節點,你可能想要用'XSLT'來轉換*你的文檔。 – 2012-07-24 11:08:50

+0

好的,是的。你認爲我應該循環所有這些文件並打印出我需要的文件嗎?我以爲我會先選擇它們然後再打印它們,從來沒有想過用不同的方式:) – Marcin 2012-07-24 11:36:59

回答

0

如果您在B元素級別選擇(不管你對孩子有什麼其他條件),你總是會得到整個B元素的內容。

另一種選擇可能是在C元素級別選擇反向條件(F!= 134)並刪除這些節點。這將取決於你的確切場景。