如何迭代检查每个标记值的多个标记

时间:2013-07-15 08:45:23

标签: xml xslt-1.0

嗨,我是xml / xslt的新蜜蜂。有人可以帮助我满足以下要求 我有多个同名的标签

<SO_ServiceType>XXXX</SO_ServiceType>
<SO_ServiceType>YYYY</SO_ServiceType>
<SO_ServiceType>ZZZZ</SO_ServiceType>

如何迭代和检查每个标签的值

2 个答案:

答案 0 :(得分:0)

此解决方案'遍历'每个SO_ServiceType节点...

  <xsl:template match="/">
      <xsl:apply-templates />
    </xsl:template>

  <xsl:template match="SO_ServiceType">
    <xsl:if test="text()='ZZZZ'">
      <sample>ZZZZ is the value</sample>
    </xsl:if>
    <node>
    <xsl:value-of select="."/>
    </node>
  </xsl:template>

<强>结果

<node>XXXX</node>
<node>YYYY</node>
<sample>ZZZZ is the value</sample>
<node>ZZZZ</node>

修改

如果你只想在结果树中输出'true',如果text()与A-70-00匹配,你可以这样做:

  <xsl:template match="SO_ServiceType">
    <xsl:if test="text()='A-70-00'">true</xsl:if>
  </xsl:template>

请记住,XSLT是一种将输入转换为输出的方法。在XSLT中,您描述了需要应用哪些规则才能获得所需的输出结果。尝试用输入节点来思考你想要发生什么,而不是想要产生输出。

答案 1 :(得分:0)

根据您对rene's answer的评论判断,您可能根本不需要“迭代”。如果在XPath表达式中进行了相等比较,其中一侧或另一侧(或两者)是一个节点集,那么如果集合中的任何节点与该值匹配,则表达式将成功。因此

<xsl:if test="/Data/SO_Service_Type = 'A-70-00'">true</xsl:if>
如果true元素中的任何一个元素具有值SO_Service_Type - 不需要A-70-00

将生成for-each