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>
不正是它在錫說! – RickySpanish
雖然我不完全確定這是爲什麼,我的不是。你能解釋一下嗎? – RickySpanish
如果至少有一個'Label'不包含'PRIVATE',你的測試'標籤/標籤[不包含(text(),'PRIVATE'))]'是真的。因此,如果有一個'MessageDetail'具有幾個'Label'孫子,其中一個不包含字符串'PRIVATE'但是另一個'''''''',那麼你的測試是真實的。 'not(Labels/Label ='PRIVATE')'另一方面測試根本沒有'Label',其內容爲'PRIVATE'。 –