我正在通过XSLT进行XML到XML的转换。我想删除输出xml中的名称空格。为此,我使用了Exclude result prefix选项,但在输出中我仍然看到名称空间。
Sorce XML:
<?xml version="1.0" encoding="ISO-8859-1"?>
<aaa>
hello
</aaa>编写的XSLT:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:simple="aaaa" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:tcm="http://www.tridion.com/ContentManager/5.0" exclude-result-prefixes="msxsl simple wireframe widget tcdl tcm xlink" xmlns:wireframe="bbb" xmlns:widget="ccc" xmlns:tcdl="tcdl">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
<xsl:template match="/">
<wireframe:wireframe>
<wireframe:si>
<widget:ah>
<xsl:value-of select="aaa" />
</widget:ah>
</wireframe:si>
</wireframe:wireframe>
</xsl:template>
</xsl:stylesheet>产生的输出:
<?xml version="1.0" encoding="utf-8"?>
<wireframe:wireframe xmlns:wireframe="aaaa">
<wireframe:si>
<widget:ah xmlns:widget="bbb">
hello
</widget:ah>
</wireframe:si>
</wireframe:wireframe>输出Expexcted:
<?xml version="1.0" encoding="utf-8"?>
<wireframe:wireframe>
<wireframe:si>
<widget:ah>
hello
</widget:ah>
</wireframe:si>
</wireframe:wireframe>请告诉我如何避免在输出XML中出现命名空间。
提前谢谢你。
发布于 2012-03-13 17:39:17
可以在exclude属性中省略两个使用的名称空间,如下所示:
exclude-result-prefixes="msxsl simple xlink tcm tcdl"这将确保使用的两个名称空间出现在根元素中,而不是出现在第一次使用它们的元素中;结果将是:
<?xml version="1.0" encoding="UTF-8"?>
<wireframe:wireframe xmlns:widget="ccc" xmlns:wireframe="bbb">
<wireframe:si>
<widget:ah>
hello
</widget:ah>
</wireframe:si>
</wireframe:wireframe>发布于 2012-03-13 16:26:32
你所要求的东西是不可能的!XML名称空间是XML语言的一部分,这就像要求剥离所有Java中的包或C#中的名称空间!
简而言之,您期望XML输出是一个无效的XML文档,因此不能从XSLT创建它,XSLT旨在生成有效的XML。
您可以通过从XSLT中删除名称空间前缀来完全删除它们:
<?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" version="1.0" encoding="UTF-8" indent="yes" />
<xsl:template match="/">
<wireframe>
<secureInbox>
<alertHeader>
<xsl:value-of select="aaa" />
</alertHeader>
</secureInbox>
</wireframe>
</xsl:template>
</xsl:stylesheet>这将产生以下结果:
<wireframe>
<secureInbox>
<alertHeader>
hello
</alertHeader>
</secureInbox>
</wireframe>发布于 2012-03-14 03:32:06
尽管这是非常糟糕的做法,但实际上可以生成这种格式不正确的XML。您可以将XSLT的输出类型设置为text,然后生成无命名空间的标签,如下所示:
<xsl:text disable-output-escaping="yes">&lt;wireframe:wireframe&gt;</xsl:text>以此类推..
就我个人而言,我认为这是“不要在家里尝试”类别的问题,但如果您不为适当的xslt样式付出一分钱,那就继续吧!
https://stackoverflow.com/questions/9680044
复制相似问题