Xslt 在不同的值上循环

Xslt 在不同的值上循环,xslt,xslt-2.0,Xslt,Xslt 2.0,给定一个使用distinct-values()函数返回不同状态列表的变量,是否有方法在for each循环中标记该变量 <States> <State>AL</State> <State>AL</State> <State>NM</State> </States> 艾尔 艾尔 纳米 下面的变量返回AL和NM,但我不能使用for each对其进行迭代。有办法解决这个问题吗 <xsl:vari

给定一个使用distinct-values()函数返回不同状态列表的变量,是否有方法在for each循环中标记该变量

<States>
<State>AL</State>
<State>AL</State>
<State>NM</State>
</States>

艾尔
艾尔
纳米
下面的变量返回AL和NM,但我不能使用for each对其进行迭代。有办法解决这个问题吗

<xsl:variable name="FormStates" select="distinct-values(States/State)"/>
  <xsl:for-each select="$FormStates">


XSLT2.0还可以。

理论上它应该可以工作;您确定给
distinct value
函数的XPath是正确的吗?您给出的代码要求
States
元素是
forms
元素的同级

您可以在变量声明之后立即插入
,以确认它是否设置正确。

函数
distinct-values()
返回一系列您应该能够迭代的值。结果可以说是“标记化”

fn:不同的值('AL','AL','NL')
返回序列
('AL','NL')

如果输出变量时
xsl:value为
,它将返回字符串“AL NL”,因为
xsl:value为
的默认序列分隔符是单个空格字符。这是您可以使用
@分隔符
属性更改的内容:

输入

<?xml version="1.0" encoding="UTF-8"?>
<States>
  <State>AL</State>
  <State>AL</State>
  <State>NM</State>
</States>
<?xml version="1.0" encoding="UTF-8"?>
<!--xsl:value-of-->
AL:NM
<!--xsl:for-each-->
AL:NM:

艾尔
艾尔
纳米
XSLT

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
  <xsl:template match="/">
    <xsl:variable name="FormStates" select="distinct-values(States/State)"/>
    <xsl:comment>xsl:value-of</xsl:comment>
    <xsl:value-of select="$FormStates" separator=":"/>
    <xsl:comment>xsl:for-each</xsl:comment>
    <xsl:for-each select="$FormStates">
      <xsl:value-of select="."/>
      <xsl:text>:</xsl:text>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

xsl:
xsl:for-each
:
输出

<?xml version="1.0" encoding="UTF-8"?>
<States>
  <State>AL</State>
  <State>AL</State>
  <State>NM</State>
</States>
<?xml version="1.0" encoding="UTF-8"?>
<!--xsl:value-of-->
AL:NM
<!--xsl:for-each-->
AL:NM:

AL:NM
铝:纳米:

这是一个我过去使用过的XSLT1.0解决方案

  <xsl:template match="/">           
    <ul> 
      <xsl:for-each select="//State[not(.=preceding::*)]">
        <li>
          <xsl:value-of select="."/>
        </li>   
      </xsl:for-each>            
    </ul>
  </xsl:template>

返回:

<ul xmlns="http://www.w3.org/1999/xhtml">
  <li>AL</li>
  <li>NM</li>
</ul>
  • 艾尔
  • 纳米

与往常一样,您根本不清楚自己有什么问题。学会提供:1。源XML文档。2.想要的结果。3.转换所需的属性。我已投票结束此问题。这不是一个真正的问题——没有人问任何问题。这个问题没有定义,也不清楚。对不起,我希望能澄清这个问题。谢谢。我不知道分隔符属性。我最终构建了一个带分隔符的字符串并使用了tokenize(),但我将返回并清理它。