2013-07-08 112 views
0

提前很抱歉,如果出现了像我以前的答案,但我已经确认并没有准确地找到答案这个简单的问题:XSLT属性

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

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

始终采用以下选择的值返回空的结果:

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

我已经凝固酶原期间通过属性值迭代sod

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"> 

我猜排除属性有事情做与问题。如果我替换它,我发现它仍然不起作用,并且结果xml在随机的地方充满了它。

+0

向我们展示XSLT,XML输入,想要的结果和当前结果的最小但完整的样本,以使我们能够重现问题。到目前为止,我们需要猜测XML输入使用哪些名称空间,以及在哪个上下文中有'xsl:value-of'。 –

回答

2

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

xmlns:xlink="..." 

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

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元素上。