嗨,我有一个转换,我试图创建一个静态元素,其中打开和关闭标签将保留在输出中。
例如,我尝试过...
<?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>
有想法吗?
谢谢。
答案 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>