使用XSLT循环遍历XML标记

使用XSLT循环遍历XML标记,xml,xslt,loops,xpath,Xml,Xslt,Loops,Xpath,我有一个XML,它包含以下内容: <ruletypes> <ruletype>Local</ruletype> <ruletype>Global</ruletype> ... </ruletypes> 地方的 全球的 ... 我想要一个规则类型列表,我尝试了以下方法: <xsl:for-each select="//ruletypes/ruletype"> <li><xsl:val

我有一个XML,它包含以下内容:

<ruletypes>
 <ruletype>Local</ruletype>
 <ruletype>Global</ruletype>
 ...
</ruletypes>

地方的
全球的
...
我想要一个规则类型列表,我尝试了以下方法:

<xsl:for-each select="//ruletypes/ruletype">
 <li><xsl:value-of select="ruletype"/></li>
</xsl:for-each>


  • 但它不起作用

    按如下方式更改选择:

    <xsl:template match="/">
    <xsl:for-each select="//ruletypes/ruletype">
          <li><xsl:value-of select="."/></li>
    </xsl:for-each>
    
    
    

  • 如下更改选择:

    <xsl:template match="/">
    <xsl:for-each select="//ruletypes/ruletype">
          <li><xsl:value-of select="."/></li>
    </xsl:for-each>
    
    
    

  • 避免对每个
    执行
    ,让XSLT处理器完成大部分工作:

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:template match="ruletype">
            <li><xsl:apply-templates/></li>
        </xsl:template>
    </xsl:stylesheet>
    
    
    
  • 适用于本文件时:

    <ruletypes>
       <ruletype>Local</ruletype>
       <ruletype>Global</ruletype>
    </ruletypes>
    
    
    地方的
    全球的
    
    生成以下输出:

    <li>Local</li>
    <li>Global</li>
    
  • 本地
  • 全球的

  • 请注意,这利用了XSLT for elements(在遇到“感兴趣的”节点之前保持处理的移动)和XSLT for text nodes的内置模板,后者通过复制文本来实现。对于每个

    都避免使用
    ,让XSLT处理器完成大部分工作:

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:template match="ruletype">
            <li><xsl:apply-templates/></li>
        </xsl:template>
    </xsl:stylesheet>
    
    
    
  • 适用于本文件时:

    <ruletypes>
       <ruletype>Local</ruletype>
       <ruletype>Global</ruletype>
    </ruletypes>
    
    
    地方的
    全球的
    
    生成以下输出:

    <li>Local</li>
    <li>Global</li>
    
  • 本地
  • 全球的

  • 请注意,这利用了XSLT for elements(在遇到“感兴趣的”节点之前保持处理的移动)和它的内置文本节点模板(通过复制文本)。

    为了澄清,
    xsl:for each
    将上下文设置为选中的
    规则类型
    元素,因此OP的
    选择=“ruletype”
    在该元素下查找另一个
    规则类型(没有)。这样,当前
    规则类型
    元素被选中(
    )并转换为一个字符串,该字符串将返回节点的文本值。为了澄清这一点,
    xsl:for each
    将上下文设置为所选的
    ruletype
    元素,因此OP的
    select=“ruletype”
    在该元素下查找另一个
    ruletype
    (没有)。这样,将选择当前的
    规则类型
    元素(
    )并将其转换为字符串,该字符串将返回节点的文本值。