如何使用xslt在没有任何空间的情况下为空标记创建xml开始和结束标记
使用xslt为没有任何空间的空标记创建重复标记。如何使用xslt在没有任何空间的情况下为空标记创建xml开始和结束标记,xslt,xslt-1.0,Xslt,Xslt 1.0,使用xslt为没有任何空间的空标记创建重复标记。 例如,代码中的请求: <?xml version = "1.0" encoding = "UTF-8"?> <root> <Name>PJ</Name> <address/> <param/> </root> PJ 输出为: <?xml version = "1.0" encoding = "UTF-8"?> <ro
例如,代码中的请求:
<?xml version = "1.0" encoding = "UTF-8"?>
<root>
<Name>PJ</Name>
<address/>
<param/>
</root>
PJ
输出为:
<?xml version = "1.0" encoding = "UTF-8"?>
<root>
<Name>PJ</Name>
<address></address>
<param></param>
</root>
PJ
正如我在评论中所说的,我不能真正推荐这样做,但如果所有其他方法都失败,请尝试在样式表中包含以下模板:
<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文件为例,用regex替换(2):
为
(1) 试图弯曲它只会毫无理由地产生极其丑陋的XSLT。 (2) 在您的示例中,请确保以XML文件所在的编码方式打开并保存XML文件
UTF-8
。
客户端正在使用旧系统,他们需要这种格式的系统。我不知道有什么好方法可以做到这一点。从表面上看,您可以将输出方法设置为HTML,但是您的处理器很可能根本不会关闭标记。“不好”的方式会将标记输出为文本,我不建议这样做。@roushan这就是你的经验教训,为什么用XML解析器以外的任何东西解析XML都不合适。你的客户犯了这个错误,现在你必须克服他们的愚蠢。这将输出为PJ,但这里我缺少具有valuesWell的字段,当然你是:你需要将其添加到现有样式表中(你没有向我们展示)我正在创建一个新的xslt,正如你所说的:请不要在注释中发布代码。我以为你已经有了样式表。如果你不知道,那么创建一个,包括上面的和模板。我不理解你的替换功能。你能详细说明一下吗?选择一种编程/脚本语言,编写一个三行脚本,以文本形式打开XML文件,执行正则表达式搜索和替换操作,然后再次保存。或者扩展运行XSLT转换的程序。我想这是显而易见的。@roushan作为旁白,请不要在StackOverflow上使用类似“u plz”的聊天语言。我们有足够的时间在这里正确地拼写单词。