XSLT:获取XML命名空间属性
问题描述:
我有以下XML:XSLT:获取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的开头声明了命名空间。无法弄清楚什么是确切的问题。任何形式的帮助都会得到真正的赞赏。谢谢。
答
XML生成器不应该做你想做的。他们将根据规格生成您的XML。不建议您在所有使用它们的元素中定义相同的名称空间!这使得它变得冗长,丑陋和奇怪的做法。
如果仅在顶部(根元素)定义名称空间,那么会出现什么问题?您只能在需要它的元素中使用它。简单。
(OP的评论:我需要它在根和我已经宣布它,但它不可用于它下面的节点,即图形和自我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>
+0
没有格局问题。我同意你的第一点。但是,你知道这些要求..我会考虑你的观点。 – GTM
所以你得到了你想要在根中的命名空间,为什么你想要在其他任何节点相同?只是用它! – AmeetC
其实这个要求就是这样! – GTM
,我希望你能理解这些含义! XSLT由您的XML生成器根据规范生成XML。在根节点上定义它使其可用于其下的所有节点,同时在该节点上定义仅使该节点的子元素可用。 – AmeetC