首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在XSLT中如何避免名称空间进入输出XML

在XSLT中如何避免名称空间进入输出XML
EN

Stack Overflow用户
提问于 2012-03-13 15:39:47
回答 3查看 3.3K关注 0票数 1

我正在通过XSLT进行XML到XML的转换。我想删除输出xml中的名称空格。为此,我使用了Exclude result prefix选项,但在输出中我仍然看到名称空间。

Sorce XML:

代码语言:javascript
复制
 <?xml version="1.0" encoding="ISO-8859-1"?>
 <aaa>
 hello
 </aaa>

编写的XSLT:

代码语言:javascript
复制
 <?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>

产生的输出:

代码语言:javascript
复制
 <?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:

代码语言:javascript
复制
 <?xml version="1.0" encoding="utf-8"?>
 <wireframe:wireframe>
   <wireframe:si>
     <widget:ah>
 hello
 </widget:ah>
   </wireframe:si>
 </wireframe:wireframe>

请告诉我如何避免在输出XML中出现命名空间。

提前谢谢你。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-13 17:39:17

可以在exclude属性中省略两个使用的名称空间,如下所示:

代码语言:javascript
复制
exclude-result-prefixes="msxsl simple xlink tcm tcdl"

这将确保使用的两个名称空间出现在根元素中,而不是出现在第一次使用它们的元素中;结果将是:

代码语言:javascript
复制
<?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>
票数 2
EN

Stack Overflow用户

发布于 2012-03-13 16:26:32

你所要求的东西是不可能的!XML名称空间是XML语言的一部分,这就像要求剥离所有Java中的包或C#中的名称空间!

简而言之,您期望XML输出是一个无效的XML文档,因此不能从XSLT创建它,XSLT旨在生成有效的XML。

您可以通过从XSLT中删除名称空间前缀来完全删除它们:

代码语言:javascript
复制
<?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>

这将产生以下结果:

代码语言:javascript
复制
<wireframe>
    <secureInbox>
        <alertHeader>
            hello
        </alertHeader>
    </secureInbox>
</wireframe>
票数 4
EN

Stack Overflow用户

发布于 2012-03-14 03:32:06

尽管这是非常糟糕的做法,但实际上可以生成这种格式不正确的XML。您可以将XSLT的输出类型设置为text,然后生成无命名空间的标签,如下所示:

代码语言:javascript
复制
<xsl:text disable-output-escaping="yes">&amp;lt;wireframe:wireframe&amp;gt;</xsl:text>

以此类推..

就我个人而言,我认为这是“不要在家里尝试”类别的问题,但如果您不为适当的xslt样式付出一分钱,那就继续吧!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9680044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档