50

我想从一些 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 进行转换。

4

3 回答 3

87

您可以使用元素的exclude-result-prefixes属性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>

要从输出文档中抑制多个命名空间,请指定它们以空格分隔:

exclude-result-prefixes="prefix1 prefix2 prefix3"

来自XSLT 规范

当样式表仅将命名空间声明用于寻址源树时,在 exclude-result-prefixes 属性中指定前缀将避免结果树中多余的命名空间声明。

于 2009-05-13T09:41:13.100 回答
15

迪沃的答案已经被选中,而且是恰当的。

但是,如果您有兴趣深入挖掘,请查看我的巨著中关于“XSLT 中的命名空间”这一广受欢迎的主题的“太多命名空间”部分。(是的,这意味着开玩笑。:-))

于 2009-05-13T10:17:38.547 回答
-4

使用扩展元素前缀=“命名空间”

像:

<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:datetime="http://exslt.org/dates-and-times"
xmlns:str="http://exslt.org/strings"
xmlns:exsl="http://exslt.org/common"
xmlns:uw="xalan://ru.sbtc.util.XSLUtil"
extension-element-prefixes="exsl str datetime uw"
version="1.0">
于 2009-05-13T09:40:48.047 回答