Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用xslt在没有任何空间的情况下为空标记创建xml开始和结束标记_Xslt_Xslt 1.0 - Fatal编程技术网

如何使用xslt在没有任何空间的情况下为空标记创建xml开始和结束标记

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

使用xslt为没有任何空间的空标记创建重复标记。
例如,代码中的请求:

<?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('&lt;', $name, '&gt;&lt;/', $name, '&gt;')" 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”的聊天语言。我们有足够的时间在这里正确地拼写单词。