如何使用xslt为空标记创建xml开始和结束标记,没有任何空间

时间:2014-12-07 06:36:38

标签: xslt xslt-1.0

使用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>

3 个答案:

答案 0 :(得分:1)

正如我在评论中所说,我不能真的推荐这个,但如果其他所有方法都失败了,请尝试在样式表中包含以下模板:

<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>

请注意,这不会复制名称空间或属性。

答案 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('&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>