我有以下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>
这里我创建了一个map $ tabNames,并希望将map与当前节点一起传递给employeeRows模板。而不是“行”参数的数据值,我获得整个地图而不是当前节点(pi:Payroll_Extloy_Employees / pi:company)的currentNode参数,我收到与“rows”参数相同的地图。 第二个问题是xsl:评估将$ 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:evaluate的XPath表达式中的静态错误:超出表达式结尾的意外标记名称“Andrews”。表达:{John Andrews 23 4000 Accounting pi:Name} 开始地点:36:42 长度:1
答案 0 :(得分:0)
我怀疑在这个元素中
<data>pi:Summary/pi:Name</data>
内容旨在成为XPath表达式,并且您希望评估此XPath表达式。这不是一个正确的期望;使用xsl:value-of instruction。
我怀疑
<xsl:variable name="dataValues" select="values/value/data"/>
应该是
<xsl:variable name="dataValues" select="$tabsName/entry/values/value/data"/>
虽然我不能说明你说的输出。
<xsl:with-param name="currentNode" select="." as="node()*"/>
有些不对劲,因为&#34;。&#34;将永远是一个单身人士,为什么&#34; as&#34;属性表明它可能是一个序列?
答案 1 :(得分:0)
也许是你的
<xsl:evaluate xpath="$employee || $path" context-item="."/>
应该是
<xsl:evaluate xpath="'$employee' || $path">
<xsl:with-param name="employee" select="$employee"/>
</xsl:evaluate>
或只是
<xsl:evaluate xpath="$path" context-item="$employee"/>