【问题标题】:XSLT 3.0 evaluate into variableXSLT 3.0 评估成变量
【发布时间】:2017-11-10 13:10:39
【问题描述】:

对于以下 XML:

<?xml version="1.0" encoding="UTF-8"?>
<pi:Payroll_Extract_Employees xmlns:pi="urn:com.workday/picof">
   <pi:company>
      <pi:employee>
         <pi:name>John Andrews</pi:name>
         <pi:age>23</pi:age>
         <pi:salary>4000</pi:salary>
         <pi:division>Accounting</pi:division>
      </pi:employee>
   </pi:company>
</pi:Payroll_Extract_Employees>

我使用此 XSL 将值存储在使用 xsl:evaluate 的变量中,然后从存储在 $names(“John Andrews”)中的名称节点输出值:

<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 

xmlns:pi="urn:com.workday/picof">
        <xsl:output method="text"/>
            <xsl:template match="pi:Payroll_Extract_Employees/pi:company">
                <xsl:variable name="test">
                <xsl:text>pi:employee/pi:name</xsl:text>
            </xsl:variable>
                <xsl:variable name="names" as="element(name)*">
                <xsl:evaluate xpath="$test" context-item="."/>
            </xsl:variable>
                <xsl:value-of select="$names"/>
            </xsl:template>
    </xsl:stylesheet>

【问题讨论】:

  • 你能解释一下你的问题是什么吗?您到底尝试了什么,什么(如果有的话)没有按您希望的那样进行,为什么?

标签: xml variables evaluation xslt-3.0


【解决方案1】:

通过命名空间声明,您需要变量的类型注释

    <xsl:variable name="names" as="element(pi:name)*">
        <xsl:evaluate xpath="$test" context-item="."/>
    </xsl:variable>

【讨论】:

  • 好像不适合我,你用什么 xslt 处理器?
  • 我尝试在 oXygen 19.1 中使用 Saxon 9.8.0.5 EE。当它“似乎不起作用”时究竟会发生什么,您是否收到错误,您想要哪个结果,您会得到哪个结果?
  • 我使用的是 Saxon 9.6.0.7 EE,所以我认为这是导致问题的原因。
  • 当谈到今年的 XSLT 3 规范时,恐怕 Saxon 9.6 已经相当老了,它的文档 saxonica.com/html/documentation9.6/conformance/xslt30.html 声明它从 2014 年 10 月 2 日开始实施 XSLT 3 last call 工作草案,所以您遇到的问题可能是由最终规范与该草案之间的差异或该撒克逊版本中未解决的问题引起的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-01
  • 1970-01-01
  • 2010-09-18
  • 1970-01-01
  • 1970-01-01
  • 2016-09-04
相关资源
最近更新 更多