我正在接收来自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>
答案 0 :(得分:1)
以下XPath(在xsl:if
元素中)应该有效:
not(Labels/Label = 'PRIVATE')