如何解决XSLTXML到CSV:如何创建动态变量并在以后的总结中引用它?
我需要通过XSLT将XML文件转换为CSV。
这是我的XML
<pi:Payroll_Extract_Employees xmlns:pi="urn:com.workday/picof">
<pi:Employee>
<pi:Summary>
<pi:Employee_ID>12345</pi:Employee_ID>
<pi:Name>John Smith</pi:Name>
</pi:Summary>
</pi:Employee>
<pi:Employee>
<pi:Summary>
<pi:Employee_ID>09876</pi:Employee_ID>
<pi:Name>Jane Rance</pi:Name>
</pi:Summary>
</pi:Employee>
</pi:Payroll_Extract_Employees>
以下是所需的输出:
Employee ID,Employee Name
12345,09876,
这是我的XSLT:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:pi="urn:com.workday/picof" exclude-result-prefixes="xsl">
<xsl:output method="text" encoding="x-UTF-16LE-BOM"/>
<xsl:variable name="delimiter" select="','"/>
<xsl:variable name="EmployeeID">
<xsl:for-each select="pi:Payroll_Extract_Employees/pi:Employee">
<xsl:value-of select="pi:Summary/pi:Employee_ID"/>
</xsl:for-each>
</xsl:variable>
<xsl:variable name="ColumnHeadings">
<field>Employee ID</field>
<field>Employee Name</field>
</xsl:variable>
<xsl:param name="headings" select="document('')/*/xsl:variable[@name='ColumnHeadings']/*" />
<xsl:template match="/">
<xsl:for-each select="$headings">
<xsl:if test="position() != 1">
<xsl:value-of select="$delimiter"/>
</xsl:if>
<xsl:value-of select="." />
</xsl:for-each>
<xsl:text>
</xsl:text>
<xsl:for-each select="pi:Payroll_Extract_Employees/pi:Employee">
<xsl:value-of
select="concat($EmployeeID,$delimiter)"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
不幸的是,它会像这样返回它:
Employee ID,Employee Name
1234509876,1234509876,
问题::您是否知道如何调整变量,以便可以隐式引用它,并且该变量将简单地遍历每个员工并返回其值?这是我遇到麻烦的代码中的变量(其他所有方法都能正常工作):
<xsl:variable name="EmployeeID">
<xsl:for-each select="pi:Payroll_Extract_Employees/pi:Employee">
<xsl:value-of select="pi:Summary/pi:Employee_ID"/>
</xsl:for-each>
</xsl:variable>
任何帮助将不胜感激!
解决方法
您正在艰难地做这件事。您已经创建了一个变量,该变量是文档的节点。创建用于直接转换文档每个节点的模板会更容易。
尝试这样:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:pi="urn:com.workday/picof" exclude-result-prefixes="xsl">
<xsl:output method="text" encoding="x-UTF-16LE-BOM"/>
<xsl:param name="headings" select="document('')/*/xsl:variable[@name='ColumnHeadings']/*" />
<xsl:template match="/">
<!-- Output the headings -->
<xsl:text>Employee ID,Employee Name</xsl:text>
<xsl:text>
</xsl:text>
<!-- For each employee -->
<xsl:for-each select="pi:Payroll_Extract_Employees/pi:Employee">
<!-- Output the value of each element that you need -->
<xsl:value-of select="pi:Summary/pi:Employee_ID"/>,<xsl:value-of select="pi:Summary/pi:Name"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。