好的,我正在编辑原始帖子。我想我通过替换原始 XML 的名称标签做了很多尝试。无论如何,这是原始文件的摘录:
<EMPLOYEE_LIST>
<EMPLOYEES>
<EMPLOYEE>
<EMPID>650000</EMPID>
<FIRST_NAME>KEITH</FIRST_NAME>
<MIDDLE_NAME>HUTCHINSON</MIDDLE_NAME>
<LAST_NAME>ROGERS</LAST_NAME>
<EMP_TYPE></EMP_TYPE>
<EMP_REF_ID>500000</EMP_REF_ID>
<JOINED_ON>2001-10-06</JOINED_ON>
<COMMENTS>Miscellanous Comments</COMMENTS>
<NATIONALITY>
<VALUE>American</VALUE>
</NATIONALITY>
<EMP_AKA>
<AKA_NAME>Danny</AKA_NAME>
</EMP_AKA>
<EMP_AKA>
<AKA_NAME>Dan</AKANAME>
</EMP_AKA>
<EMP_AKA>
<AKA_NAME>Ray</AKA_NAME>
</EMP_AKA>
<EMP_ADDR>
<STREET> </STREET>
<CITY> </CITY>
<STATE> </STATE>
<ZIP> </ZIP>
<COUNTRY> </COUNTRY>
</EMPLOYEE>
</EMPLOYEES>
</EMPLOYEE_LIST>
我在使用上述 XML 时遇到的问题是,我找不到在一个属性下容纳多个 AKA(也称为)属性的方法,而我用于此转换的 XSL 如下:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/EMPLOYEE_LIST">
<employees>
<xsl:apply-templates select="EMPLOYEES/node()"/>
</employees>
</xsl:template>
<xsl:template match="EMPLOYEE">
<employee>
<xsl:apply-templates select="*"/>
</employee>
</xsl:template>
xsl:template match="EMPLOYEE/EMPID">
<emp_id>
<xsl:value-of select="."/>
</emp_id>
</xsl:template>
<xsl:template match="EMPLOYEE/FIRST_NAME">
<f_name>
<xsl:value-of select="."/>
</f_name>
</xsl:template>
<xsl:template match="EMPLOYEE/MIDDLE_NAME">
<m_name>
<xsl:value-of select="."/>
</m_name>
</xsl:template>
<xsl:template match="EMPLOYEE/LAST_NAME">
<l_name>
<xsl:value-of select="."/>
</l_name>
</xsl:template>
.
.
.
.
.
<xsl:template match="EMPLOYEE/EMP_AKA">
<aka_list>
<xsl:for-each select="AKA_NAME">
<aka>
<xsl:for-each select=".">
<xsl:apply-templates/>
</xsl:for-each>
</aka>
</xsl:for-each>
</aka_list>
</xsl:template>
</xsl:stylesheet>
当应用于我的 XML 时,上面给出的 XSL 给出了以下输出:
<?xml version="1.0" encoding="UTF-8"?>
<employees>
<employee>
<emp_id>111345</emp_id>
<f_name>KEITH</f_name>
<m_name>HUTCHINSON</m_name>
<l_name>ROGERS</l_name>
<aka_list>
<aka>Danny</aka>
</aka_list>
<aka_list>
<aka>Dan</aka>
</aka_list>
<aka_list>
<aka>Ray</aka>
</aka_list>
</employee>
</employees>
这不是我想要实现的目标,因为我需要以下格式的数据:
<?xml version="1.0" encoding="UTF-8"?>
<employees>
<employee>
<emp_id>111345</emp_id>
<f_name>KEITH</f_name>
<m_name>HUTCHINSON</m_name>
<l_name>ROGERS</l_name>
<aka_list>
<aka>Danny</aka>
<aka>Dan</aka>
<aka>Ray</aka>
</aka_list>
</employee>
</employees
有什么办法可以做到这一点?
展望未来,XML 中有大量元素,例如 AKA_NAME。
<aka_list>
<aka>Danny</aka>
</aka_list>
<aka_list>
<aka>Dan</aka>
</aka_list>
<aka_list>
<aka>Ray</aka>
</aka_list>
<aka_list>
<aka>Danny_2</aka>
</aka_list>
<aka_list>
<aka>Dan_2</aka>
</aka_list>
<aka_list>
<aka>Ray_2</aka>
</aka_list>
转换应该只继承前 5 个,第 6 个应该被截断,如下所示:
<aka_list>
<aka>Danny</aka>
<aka>Dan</aka>
<aka>Ray</aka>
<aka>Danny_2</aka>
<aka>Dan_2</aka>
</aka_list>