2014-02-28 120 views
2

我正在從Web服務調用接收XML,如下所示,並且只有在沒有PRIVATE標籤時才輸出消息文本。僅輸出文本沒有具有特定值的子節點

<MessageStore> 
    <MessageDetails> 
     <Text>Message1</Text> 
     <Labels> 
     <Label>PRIVATE</Label> 
     </Labels> 
    </MessageDetails> 

    <MessageDetails> 
     <Text>Message2</Text> 
     <Labels> 
     <Label>PRIVATE</Label> 
     </Labels> 
    </MessageDetails> 

     <MessageDetails> 
     <Text>Message3</Text> 
     <Labels> 
     <Label>PRIVATE</Label> 
     <Label>PUBLIC</Label> 
     </Labels> 
    </MessageDetails> 

    <MessageDetails> 
     <Text>Message4</Text> 
     <Labels> 
     <Label>PUBLIC</Label> 
     <Label>PRIVATE</Label> 
     </Labels> 
    </MessageDetails> 

    <MessageDetails> 
     <Text>Message5</Text> 
     <Labels> 
     <Label>PUBLIC</Label> 
     </Labels> 
    </MessageDetails> 
</MessageStore> 

我試過以下的XSLT,但是如果一條消息有私人+公共標籤,它的文本仍然會輸出。例如。 「Message3 Message4 Message5」。我想要的只是「消息5」。

<?xml version="1.0" encoding="ISO-8859-1"?> 
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:template match="MessageDetails"> 

     <xsl:if test="Labels/Label[not(contains(text(), 'PRIVATE'))]"> 
      <xsl:value-of select="Text" /> 
     </xsl:if> 

    </xsl:template> 
    </xsl:stylesheet> 

回答

1

以下XPath(在你的xsl:if元素)應該工作:

not(Labels/Label = 'PRIVATE') 
+0

不正是它在錫說! – RickySpanish

+0

雖然我不完全確定這是爲什麼,我的不是。你能解釋一下嗎? – RickySpanish

+1

如果至少有一個'Label'不包含'PRIVATE',你的測試'標籤/標籤[不包含(text(),'PRIVATE'))]'是真的。因此,如果有一個'MessageDetail'具有幾個'Label'孫子,其中一個不包含字符串'PRIVATE'但是另一個'''''''',那麼你的測試是真實的。 'not(Labels/Label ='PRIVATE')'另一方面測試根本沒有'Label',其內容爲'PRIVATE'。 –

相關問題