我有以下xml:
<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: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="tabsNames">
<entry>
<spreadSheetName>Payroll Data for Taiwan</spreadSheetName>
<values>
<value>
<header>Chinese Name</header>
<data>/pi:Name</data>
</value>
</values>
</entry>
</xsl:variable>
<xsl:variable name="currentNode" select="."/>
<xsl:for-each select="$tabsNames/entry">
<xsl:variable name="dataValues" select="values/value/data"/>
<xsl:call-template name="employeeRows">
<xsl:with-param name="rows" select="$dataValues" as="element()*"/>
<xsl:with-param name="currentNode" select="$currentNode" as="element()"/>
</xsl:call-template>
</xsl:for-each>
</xsl:template>
<xsl:template name="employeeRows">
<xsl:param name="rows" select="."/>
<xsl:param name="currentNode" select="."/>
<xsl:for-each select="$currentNode/pi:Employee">
<xsl:variable name="employee" select="." as="element()"/>
<xsl:for-each select="$rows">
<xsl:variable name="path" select="."/>
<xsl:value-of>
<xsl:evaluate xpath="$employee || $path" context-item="."/>
<!--<xsl:value-of select="$employee/pi:name"/>-->
</xsl:value-of>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
在这里,我正在创建一个地图 $tabNames,并且希望将地图与当前节点一起传递给 employeeRows 模板。而不是“行”参数的数据值,我得到整个地图,而不是 currentNode 参数的当前节点 (pi:Payroll_Extract_Employees/pi:company),我收到与“行”参数相同的地图。第二个问题是 xsl:evaluates 将 $employee 更改为我想要遵循的值以给我相同的输出
<xsl:evaluate xpath="$employee || $path" context-item="."/>
像这样
<xsl:value-of select="$employee/pi:Name"/>
到目前为止,我在这里引发了一个错误:
<xsl:evaluate xpath="$employee || $path" context-item="."/>
错误信息:
系统 ID:C:\Users\przemekb\AppData\Local\Temp\Untitled4.xsl 严重性:致命描述:提供给 xsl 的 XPath 表达式中的静态错误:评估:超出表达式末尾的意外令牌名称“Andrews”。表达式:{ John Andrews 23 4000 Accounting pi:Name} 开始位置:36:42 长度:1