仅输出文本没有具有特定值的子节点

时间:2014-02-28 13:31:00

标签: xslt xpath xslt-2.0

我正在接收来自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 个答案:

答案 0 :(得分:1)

以下XPath(在xsl:if元素中)应该有效:

not(Labels/Label = 'PRIVATE')