具有命名空间的XSLT属性

时间:2013-07-08 09:43:10

标签: java xml xslt xml-namespaces

如果之前有像我一样的答案,请提前抱歉,但我已经检查过,并且没有找到这个简单问题的答案:

<self-uri xlink:href="http://www.harmreductionjournal.com/content/1/1/5">

我想要做的就是选择属性"xlink:href"

的值

应用以下选择器始终返回空结果:

<xsl:value-of select="@xlink:href"/>

我在处理期间迭代了属性值

xlink:href: http://www.harmreductionjournal.com/content/1/1/5

我的问题非常简单:如何获取具有命名空间的属性的值?我的理解是它应该像这样工作。

如果你能指出我在SO上的正确问题就足够了。

提前致谢。

修改

根据答案,我检查了我的根样式表声明,它看起来像这样:

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:xlink="http://www.w3.org/1999/xlink"
  xmlns:mml="http://www.w3.org/1998/Math/MathML"
  exclude-result-prefixes="xlink mml">

我猜测exclude属性与问题有关。如果我替换它,我发现它仍然不起作用,结果xml在随机位置上已经满了。

2 个答案:

答案 0 :(得分:2)

只要您的XSL文件具有映射到同一名称空间的相同前缀,您的方法就可以正常工作。换句话说,您的XSL文件应该具有命名空间映射

xmlns:xlink="..."

其中...与源文档中为该命名空间前缀定义的值相同。

答案 1 :(得分:1)

<xsl:template match="self-uri">
  <xsl:value-of
   select="@xlink:href"
   xmlns:xlink="http://www.w3.org/1999/xlink"/>
</xsl:template>
假设输入文档使用http://www.w3.org/TR/xlink11/

应该这样做。当然,您通常只需将xmlns:xlink="http://www.w3.org/1999/xlink"放在代码的xsl:stylesheet元素上。