我正在尝试仅将XML转换为用另一个替换节点名称,但是我构建的XSLT正在搞乱转换后的XML。这可能是一个我可能忽略的小问题,但很长一段时间我都坚持这个问题。
输入我拥有的XML:
<?xml version="1.0" encoding="UTF-8"?>
<dataCollection>
<queryConst language="DBSQL">
<queryUsed>
SELECT EMP.FirstName, EMP.LastName FROM (SELECT FirstName, LastName FROM
employees WHERE EmployeeID < 10) AS EMP
</queryUsed>
</queryConst>
<record>
<old>
<Employees>
<FirstName>James</FirstName>
<LastName>Gosling</LastName>
</Employees>
</old>
</record>
<record>
<old>
<Employees>
<FirstName>Rod</FirstName>
<LastName>Johnson</LastName>
</Employees>
</old>
</record>
</dataCollection>
使用的XSLT如下:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="dataCollection/queryConst/@language">
<xsl:attribute name="language">DBVIEW</xsl:attribute>
</xsl:template>
<xsl:template match="dataCollection/record/old/Employees">
<xsl:element name="TABLE">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
我想要的输出XML如下:
<?xml version="1.0" encoding="UTF-8"?>
<dataCollection>
<queryConst language="DBVIEW">
<queryUsed>
SELECT EMP.FirstName, EMP.LastName FROM (SELECT FirstName,
LastName FROM employees WHERE EmployeeID < 10) AS EMP
</queryUsed>
</queryConst>
<record>
<old>
<TABLE>
<FirstName>James</FirstName>
<LastName>Gosling</LastName>
</TABLE>
</old>
</record>
<record>
<old>
<TABLE>
<FirstName>Rod</FirstName>
<LastName>Johnson</LastName>
</TABLE>
</old>
</record>
</dataCollection>
非常感谢上述任何帮助/提示/建议。
答案 0 :(得分:1)
您需要从匹配xsl:copy
的模板中删除Employees
。此外,当元素名称已知时,无需使用xsl:element
。试试吧:
<xsl:template match="dataCollection/record/old/Employees">
<TABLE>
<xsl:apply-templates/>
</TABLE>
</xsl:template>
另请注意,match
模式不是select
表达式。除非输入XML中的其他位置有其他Employees
节点,否则无需使用该路径。使用给定的示例,
<xsl:template match="Employees">
就足够了。