[英]How to transform a XML using XSLT only modifying a node that's required?
我正在尝试仅转换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>
上面的任何帮助/提示/建议都非常感谢。
您需要从与模板匹配的Employees
删除xsl:copy
。 另外,当元素名称已知时,也无需使用xsl:element
。 简单尝试:
<xsl:template match="dataCollection/record/old/Employees">
<TABLE>
<xsl:apply-templates/>
</TABLE>
</xsl:template>
还要注意, match
模式不是select
表达式 。 除非在输入XML的其他位置有其他Employees
节点,否则不需要使用路径。 在给定的示例中,
<xsl:template match="Employees">
足够了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.