如何在XML转换中强制打开和关闭标签?

时间:2018-09-13 17:17:59

标签: xml xslt

嗨,我有一个转换,我试图创建一个静态元素,其中打开和关闭标签将保留在输出中。

例如,我尝试过...

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" encoding="ISO-8859-1"/>
<xsl:template match="/">
<root>
<child>
<!--static values-->
<xsl:element name="ad_version"></xsl:element>
<action_code></action_code>
</child>
</root>
</xsl:template>
</xsl:stylesheet>

这将输出以下内容:

<?xml version="1.0" encoding="iso-8859-1"?>
<root>
  <child>
    <ad_version />
    <action_code />
  </child>
</root>

我需要...

<ad_version></ad_version>
<action_code></action_code>

有想法吗?

谢谢。

1 个答案:

答案 0 :(得分:3)

正式地,空(<a></a>)和原子(<a />)标签之间没有区别;因此,如果您的供应商不能接受此数据,则将出现错误/由于它们不符合标准,因此应该对其进行修复。

但是,如果您必须修改自己的代码以符合其标准,则有多种方法...

  • 如果您使用的是Microsoft的.Net XslCompiledTransform ,则可以使用<xsl:value-of select="''" />填充标签;即在运行时输出空白的代码。参见XSLT Fiddle Example

  • 如果您使用的是 Saxon ,则可以将输出从xml切换到xhtml,例如<xsl:output method="xhtml"。参见XSLT Fiddle Example

对于其他引擎,请告诉我们,我们可以尝试查找黑客。对于许多将输出更改为html的人来说可能会起作用,但会丢失XML声明(<?xml version="1.0" encoding="ISO-8859-1"?>),因此可能导致其他问题,尤其是当您使用正常ASCII范围之外的字符时。 / p>