使用 XSLT 为空标签创建重复标记,没有任何空格。
例如,请求如代码所示:
<?xml version = "1.0" encoding = "UTF-8"?>
<root>
<Name>PJ</Name>
<address/>
<param/>
</root>
输出为 :
<?xml version = "1.0" encoding = "UTF-8"?>
<root>
<Name>PJ</Name>
<address></address>
<param></param>
</root>
正如我在评论中所说,我真的不能推荐这个,但如果所有其他方法都失败了,请尝试在您的样式表中包含以下模板:
<xsl:template match="*[not(* or text())]">
<xsl:variable name="name" select="local-name()"/>
<xsl:value-of select="concat('<', $name, '></', $name, '>')" disable-output-escaping="yes"/>
</xsl:template>
请注意,这不会复制命名空间或属性。
让你的 XSLT 做它的事情,不要试图弯曲它(1)。
取它生成的 XML 文件和正则表达式替换(2):<([^/s]+)s*/>
与 <1></1>
。
(1) 试图弯曲它只会无缘无故地产生极其丑陋的 XSLT。
(2)确保打开并保存XML文件,以它所在的编码保存,在您的情况下UTF-8
。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8"/>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<!-- <xsl:variable name="name" select="local-name()"/> -->
<xsl:value-of select="concat('<', local-name(), '></', local-name(), '>')" disable-output-escaping="yes"/>
<xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="text() | processing-instruction() | comment()">
<xsl:copy/>
</xsl:template>
</xsl:stylesheet>