0

嗨,我是 xml/xslt 的新手。有人可以帮我解决以下要求吗?我有多个同名标签

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

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

4

2 回答 2

0

从您对rene 答案的评论来看,您可能根本不需要“迭代”。当您在 XPath 表达式中进行相等比较时,其中一侧或另一侧(或两者)是节点集,则如果集中的任何节点与该值匹配,则表达式作为一个整体成功。因此

<xsl:if test="/Data/SO_Service_Type = 'A-70-00'">true</xsl:if>

true如果任何SO_Service_Type元素具有该值,将产生A-70-00-for-each不需要。

于 2013-07-15T10:49:53.423 回答
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>

编辑

如果您只想在 text() 匹配的情况下在结果树中输出“true”,则A-70-00可以执行以下操作:

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

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

于 2013-07-15T09:03:49.140 回答