【发布时间】:2013-12-31 12:59:50
【问题描述】:
我的要求是使用 XSLT 转换将复杂的 XML 数据转换为表格格式。我能够设计 XSLT,但我为每个重复字段(如部门和中心)获得了多行。在一行中,我获得了值DepartmentCode 和 DepartmentName,CenterCode 和 CenterName 为 NULL,在另一行中,我得到 CenterCode 和 CenterName 的值,其中 DepartmentCode 和 DepartmentName 为 NULL。请帮助我为以下复杂的 XML 文件设计 XSLT。
复杂的 XML 文件
<Report_Data>
<Report_Entry>
<EmployeeID>78798</EmployeeID>
<ActiveDirectoyID>sanjeev@hotmail.com</ActiveDirectoyID>
<PlatinumID>7598409</PlatinumID>
<LastName>Paul</LastName>
<Department>
<DepartmentCode>601</DepartmentCode>
<DepartmentName>Service</DepartmentName>
</Department>
<Department>
<DepartmentCode>602</DepartmentCode>
<DepartmentName>Mgmt</DepartmentName>
</Department>
<Center>
<CenterCode>101</CenterCode>
<CenterName>ABC</CenterName>
</Center>
<Center>
<CenterCode>102</CenterCode>
<CenterName>PQR</CenterName>
</Center>
<BusinessUnit>Sample</BusinessUnit>
<BankAccountType>1001</BankAccountType>
</Report_Entry>
</Report_Data>
XSLT 代码
<xslt:stylesheet xmlns:xslt="http://www.abc.org/1999/XSL/Transform" xmlns:pqr- xform="http://www.testing.com/2003/xform" xmlns:xs="http://www.abc.org/2001/XMLSchema" version="2.0">
<xslt:template match="/">
<xslt:variable name="_EmployeeID"/>
<xslt:variable name="_DepartmentCode"/>
<xslt:variable name="_DepartmentName"/>
<xslt:variable name="_CenterCode"/>
<xslt:variable name="_CenterName"/>
<xslt:element name="results">
<xslt:for-each select="Report_Data">
<xslt:for-each select="Report_Entry">
<xslt:variable name="_EmployeeID" select="EmployeeID"/>
<xslt:for-each select="Department">
<xslt:variable name="_DepartmentCode" select="DepartmentCode"/>
<xslt:variable name="_DepartmentName" select="DepartmentName"/>
<xslt:element name="result">
<xslt:element name="EmployeeID">
<xslt:value-of select="$_EmployeeID"/>
</xslt:element>
<xslt:element name="DepartmentCode">
<xslt:value-of select="$_DepartmentCode"/>
</xslt:element>
<xslt:element name="DepartmentName">
<xslt:value-of select="$_DepartmentName"/>
</xslt:element>
<xslt:element name="CenterCode">
<xslt:value-of select="$_CenterCode"/>
</xslt:element>
<xslt:element name="CenterName">
<xslt:value-of select="$_CenterName"/>
</xslt:element>
</xslt:element>
</xslt:for-each>
<xslt:for-each select="Center">
<xslt:variable name="_CenterCode" select="CenterCode"/>
<xslt:variable name="_CenterName" select="CenterName"/>
<xslt:element name="result">
<xslt:element name="EmployeeID">
<xslt:value-of select="$_EmployeeID"/>
</xslt:element>
<xslt:element name="DepartmentCode">
<xslt:value-of select="$_DepartmentCode"/>
</xslt:element>
<xslt:element name="DepartmentName">
<xslt:value-of select="$_DepartmentName"/>
</xslt:element>
<xslt:element name="CenterCode">
<xslt:value-of select="$_CenterCode"/>
</xslt:element>
<xslt:element name="CenterName">
<xslt:value-of select="$_CenterName"/>
</xslt:element>
</xslt:element>
</xslt:for-each>
<xslt:element name="result">
<xslt:element name="EmployeeID">
<xslt:value-of select="$_EmployeeID"/>
</xslt:element>
<xslt:element name="DepartmentCode">
<xslt:value-of select="$_DepartmentCode"/>
</xslt:element>
<xslt:element name="DepartmentName">
<xslt:value-of select="$_DepartmentName"/>
</xslt:element>
<xslt:element name="CenterCode">
<xslt:value-of select="$_CenterCode"/>
</xslt:element>
<xslt:element name="CenterName">
<xslt:value-of select="$_CenterName"/>
</xslt:element>
</xslt:element>
</xslt:for-each>
</xslt:for-each>
</xslt:element>
</xslt:template>
</xslt:stylesheet>
需要的输出
EmployeeID DepartmentCode DepartmentName CenterCode CenterName 78798 601 服务 101 ABC 78798 602 管理 102 PQR
感谢和问候 桑吉夫
【问题讨论】:
-
到目前为止你有什么?
-
我只能设计一个简单的 XSLT,它可以为部门和中心获取多行记录。
-
我有一个工具,我可以将列映射到输出列,并且 XSLT 会自动创建,但仅适用于简单的 XML,而不适用于像这样的复杂 XML。在自定义 XML 的情况下,该工具允许自定义XSLT 以获得所需的输出。
-
没有看到您的 xslt 或相关 xslt 代码的 sn-p,很难为您提供帮助。
-
我已经添加了 XSLT 代码,请看一下,让我知道我必须在 XSLT 中执行哪些更改,以便每个部门和中心都有单行以及所有列值。