<xml>
<parent>
<child>A</child>
<child>B</child>
<pet>
<dog>C</dog>
<cat>D</cat>
</pet>
</parent>
</xml>
需要成为
<xml>
<parent>
<child></child>
<child></child>
<pet>
<dog></dog>
<cat></cat>
</pet>
</parent>
</xml>
我的真实XML包含100多个不同的元素名称,所以我需要一个通用的方法。
我正在尝试使用身份转换的变体,但我遇到了XSL错误。
文件错误:cleanxml.xsl -2147467259要创建“ELEMENT”类型的节点,必须指定有效名称。
<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
<xsl:template match='/|@*|node()'>
<!--
Regular Identity Transform
<xsl:copy>
<xsl:apply-templates select='@*|node()'/>
</xsl:copy>
-->
<xsl:variable name='name' select='local-name()'/>
<xsl:element name='{$name}'>
<xsl:apply-templates select='@*|node()'/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:1)
使用此xsl
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="*">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="text()" />
</xsl:stylesheet>
答案 1 :(得分:0)
您需要从身份转换开始,然后添加
<xsl:template match="text()[normalize-space()]"/>
所以你需要的是XSLT 3(http://xsltfiddle.liberty-development.net/gWcDMec)
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="3.0">
<xsl:mode on-no-match="shallow-copy"/>
<xsl:template match="text()[normalize-space()]"/>
</xsl:stylesheet>
或者对于早期版本,您需要将身份转换拼写为
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
而不是使用xsl:mode
。