【问题标题】:How to concatenate xsl:value-of with separator如何连接 xsl:value-of 与分隔符
【发布时间】:2016-06-25 01:47:58
【问题描述】:

给定 XML:

<issueDate day="30" month="09" year="2015"/>

我想构建一个输出的字符串:2015-09-30

这行得通:

<xsl:variable name="issueDate" as="xs:string">
    <xsl:value-of select="concat(//issueDate/@year,'-',//issueDate/@month,'-',//issueDate/@day)" />
</xsl:variable>

...

<xsl:value-of select="$issueDate"/>

但这引发了错误(预期 EOF,找到 ','):

<xsl:value-of select="//issueDate/@year,//issueDate/@month,//issueDate/@day" separator="-" />

使用分隔符属性选择多个值的语法是什么?

【问题讨论】:

  • 您确定您使用的是 XSLT 2.0 处理器,例如 Saxon 9、XmlPrime 或 AltovaXML? xsl:value-ofseparator 属性和序列运算符 , 是 XSLT/XPath 2.0 的一部分,不受 XSLT 1.0 处理器的支持。
  • 我用的是Antenna House,可能是1.0,谢谢。
  • 如果您有一个可以工作的版本,为什么还要浪费时间询问一个不工作的替代方案?
  • 我想知道如何在不使用 concat 的情况下一次选择多个属性。我很抱歉浪费了任何人的时间,我不认为这是浪费我的时间,因为我学到了一些东西。

标签: xslt concatenation separator value-of


【解决方案1】:

如果你可以使用 XPath-2.0/XSLT-2.0,你可以使用string-join

<xsl:for-each select="//issueDate">
  <xsl:value-of select="string-join( (@year, @month, @day), '-')" />
  <xsl:text>&#10;</xsl:text>   <!-- just for pretty output -->
</xsl:for-each>

【讨论】:

  • 谢谢zx485,我遇到了同样的错误,我刚刚发现我使用的是XSL 1.1。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-30
相关资源
最近更新 更多