2015-01-17 66 views
-1

(更新)如何有一個以上的條件

我有類似如下的XML XPath表達式:

<?xml version="1.0" encoding="utf-8"?> 
<ChangeTypes> 
    <ChangeType Type="ItemGLStock"> 
     <ItemMessages> 
      <ItemMessage Type="MessageType="TypeI"> 
       <Content MessageContentTermID="0" MessageContent="Bla Bla Bla"/> 
      </ItemMessage> 
      <ItemMessage Type="MessageType="TypeII"> 
       <Content MessageContentTermID="0" MessageContent="Bla Bla Bla"/> 
      </ItemMessage> 
      <ItemMessage Type="MessageType="TypeIII"> 
       <Content MessageContentTermID="0" MessageContent="Bla Bla Bla"/> 
      </ItemMessage> 
      <ItemMessage Type="MessageType="TypeIV"> 
       <Content MessageContentTermID="0" MessageContent="Bla Bla Bla"/> 
      </ItemMessage> 
     </ItemMessages> 
    </ChangeType> 
</ChangeTypes> 

現在我想使用XPath選擇一個MessageContentTermID和在messageContent,基於ChangeType和ItemMessage類型。 這可能嗎?

+1

既然你只有一個'ChangeType'它真的不歸結爲兩個選擇,是嗎?回答你的問題:確定這是可能的。請提供所需的輸入和輸出示例(最好是您的嘗試)。 – usr2564301

+0

@Jongware它是一個很大的文件,有很多changeTypes :)我剛剛在這裏提到了一個例子。 – Afflatus

+0

如果這實際上是您的輸入數據,則根本不是XML。 –

回答

1

您的示例輸入XML無效 - 我調整了例如<ChangeType ="ItemGLStock"><ChangeType Type="ItemGLStock"><ItemMessage Type="MessageType="TypeI"><ItemMessage MessageType="TypeI">,改變了ItemGLEvaluationMessage標記被打開,但但關閉,反之亦然,以ItemMessage以下調整示例輸入:

<ChangeTypes> 
    <ChangeType Type="ItemGLStock"> 
    <ItemGLEvaluationMessages> 
     <ItemMessage MessageType="TypeI"> 
      <Content MessageContentTermID="0" MessageContent="Bla Bla Bla"/> 
     </ItemMessage> 
     <ItemMessage MessageType="TypeII"> 
      <Content MessageContentTermID="0" MessageContent="Bla Bla Bla"/> 
     </ItemMessage> 
     <ItemMessage MessageType="TypeIII"> 
      <Content MessageContentTermID="0" MessageContent="Bla Bla Bla"/> 
    </ItemMessage> 
     <ItemMessage MessageType="TypeIV"> 
      <Content MessageContentTermID="0" MessageContent="Bla Bla Bla"/> 
     </ItemMessage> 
    </ItemGLEvaluationMessages> 
    </ChangeType> 
</ChangeTypes> 

對於這個例子,下面的XPath

//Content[parent::ItemMessage[@MessageType="TypeI"] and 
      ancestor::ChangeType[@Type='ItemGLStock']] 
     /@MessageContentTermID 

根據以下兩個條件選擇MessageContentTermID

parent::ItemMessage[@MessageType="TypeI"] 
and 
ancestor::ChangeType[@Type='ItemGLStock'] 

結果:

MessageContentTermID="0" 

對於在messageContent,它的相應:

//Content[parent::ItemMessage[@MessageType="TypeI"] and 
      ancestor::ChangeType[@Type='ItemGLStock']] 
     /@MessageContent 

結果:

MessageContent="Bla Bla Bla" 

如果你只想要的值,你可以使用string()

string(//Content[parent::ItemMessage[@MessageType="TypeI"] and 
       ancestor::ChangeType[@Type='ItemGLStock']] 
       /@MessageContent) 

結果:

Bla Bla Bla 
+0

是的,我應該使用祖先以及父母。謝謝! – Afflatus

相關問題