XSL:避免将命名空间定义导出到结果XML文档

XSL:避免将命名空间定义导出到结果XML文档,xml,xslt,namespaces,export,msxsl,Xml,Xslt,Namespaces,Export,Msxsl,我想从一些XML文件中获取数据,并将它们转换为新的XML文档。但是,我不希望XSLT中的名称空间定义出现在结果文档中 换言之: 资料来源: <Namespace:Root xmlns:Namespace="http://www.something.com"> 样式表: <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w

我想从一些XML文件中获取数据,并将它们转换为新的XML文档。但是,我不希望XSLT中的名称空间定义出现在结果文档中

换言之:

资料来源:

<Namespace:Root xmlns:Namespace="http://www.something.com">

样式表:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:Namespace="http://www.something.com">

结果:

<resultRoot xmlns:Namespace="http://www.something.com">
<!--I don't want the Namespace definition above-->


我正在使用msxsl进行转换。

使用扩展元素前缀=“Namespace”

比如:


您可以使用
xsl:stylesheet
元素的
排除结果前缀
属性,以避免将命名空间前缀发送到输出文档中:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
         xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
         xmlns:prefix1="http://www.something.com"
         exclude-result-prefixes="prefix1">

</xsl:stylesheet>
从:

当样式表仅为寻址源树而使用名称空间声明时,在“排除结果前缀”属性中指定前缀将避免在结果树中使用多余的名称空间声明


迪沃的答案已经被选中了,这是恰当的


但是,如果您对深入挖掘感兴趣,请查看我的代表作中关于“XSLT中的名称空间”这一广受欢迎的主题的部分。(是的,这是在开玩笑。:-)

我假设你的意思是排除结果前缀?我们使用扩展元素前缀,效果很好。扩展元素前缀确实有同样的效果,但它有额外的效果。放入其中一个名称空间的任何元素都将被解释为扩展元素(而不是文字结果元素)。这很可能适合你在回答中的例子。但如果您不希望出现这种额外的行为,那么只需使用exclude result prefixesHi@Evan!这确实是一个非常有用的链接!在使用copy时不使用不需要的名称空间的技巧正是我想要的。然而,让我惊讶的是,这个技巧实际上不适用于XSLT2.0(例如使用XALAN),但您必须遵循为2.0绘制的路径。在XSLT1.0中(例如使用
xsltproc
),它工作得很好。因此,从XSLT 1.0切换到XSLT 2.0处理器实际上可以显著改变输出,尽管从语义上来说,额外的名称空间不应该是下游的问题,但卷方面可能除外。这才是实际问题的真正答案!感谢您为我提供了XSLT1.0的解决方案!
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
         xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
         xmlns:prefix1="http://www.something.com"
         exclude-result-prefixes="prefix1">

</xsl:stylesheet>
exclude-result-prefixes="prefix1 prefix2 prefix3"