XSLT:将XML命名空间作为属性

时间:2013-10-04 06:16:01

标签: xslt xml-namespaces

我有以下xml:

<article article-type="research-article">
<body>
<graphic xlink:href="zee9991370930006.g.eps"/>
<self-uri xlink:title="pdf" xlink:href="zee00813002857.pdf" />
</body>
</article>

我需要将其转换为:

<article article-type="research-article" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:mml="http://www.w3.org/1998/Math/MathML">
<body>
<graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="zee9991370930006.g.eps"/>
<self-uri xlink:title="pdf" xlink:href="zee00813002857.pdf" xmlns:xlink="http://www.w3.org/1999/xlink"/>
</body>
</article>

我在XSLT 2.0中为每个需要命名空间属性的元素使用了以下命令:

<xsl:namespace name="xlink" select="'http://www.w3.org/1999/xlink'"/>
<xsl:namespace name="mml" select="'http://www.w3.org/1998/Math/MathML'"/>

但问题是我只为一个元素article获取名称空间属性。我已经在xslt的开头声明了名称空间。无法弄清楚究竟是什么问题。任何形式的帮助都将得到真正的赞赏。感谢。

1 个答案:

答案 0 :(得分:0)

XML生成器不应该做你想要的。他们将根据规范生成XML。不建议您在使用它们的所有元素中定义相同的命名空间!这使得它变得冗长,丑陋和奇怪的做法。

如果仅在顶部(根元素)定义命名空间,会出现什么问题?您只能在需要它的元素中使用它。简单。

OP的评论:我需要它在root用户并且已经声明了它。但它不适用于它下面的节点,即我的情况下的图形和自我uri)。 你检查过xml是否格式正确吗?如果你在这里发布的是完整的xml,那么graphic和self-uri应该总是有可用的命名空间。出于上述原因,您应该针对以下输出。

<article article-type="research-article" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:mml="http://www.w3.org/1998/Math/MathML">
  <body>
    <graphic xlink:href="zee9991370930006.g.eps"/>
    <self-uri xlink:title="pdf" xlink:href="zee00813002857.pdf"/>
  </body>
</article>