使用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>
答案 0 :(得分:1)
正如我在评论中所说,我不能真的推荐这个,但如果其他所有方法都失败了,请尝试在样式表中包含以下模板:
<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>
请注意,这不会复制名称空间或属性。
答案 1 :(得分:1)
让你的XSLT做它的事情,不要试图弯曲(1)。
将其生成的XML文件和正则表达式替换为(2):<([^/\s]+)\s*/>
<\1></\1>
。
<子> (1)尝试弯曲它只会产生非常难看的XSLT,没有充分的理由。 子>
<子>
(2)确保在您的案例UTF-8
中打开并保存XML文件的编码。
子>
答案 2 :(得分:0)
<?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>