如何使用 xslt 为空标记创建不带任何空格的 xml 开始和结束标记



使用 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('&lt;', $name, '&gt;&lt;/', $name, '&gt;')" 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('&lt;', local-name(), '&gt;&lt;/', local-name(), '&gt;')" 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>

相关内容

  • 没有找到相关文章

最新更新