我的RDF xml文件是这样的..
<rdf:RDF>
<rdf:Description rdf:about="........">
<j.0:property rdf:resource="....."/>
<j.0:property rdf:resource=....."/>
<j.0:property rdf:resource="........"/>
</rdf:Description>
</rdf:RDF>
现在在我的XSLT样式表中,我需要检索所有j.0:property
标记的值。我正在使用这样的东西:
<xsl:apply-templates select="j.0:property"/>
<xsl:template match="j.0:property">
<xsl:text><xsl:value-of select="/rdf:RDF/rdf:Description/j.0:propert /@rdf:resource"/></xsl:text>
</xsl:template>
然后它返回相同的值3次。该值是遇到的第一个属性的值。 请帮助我如何获得每个房产的价值。
答案 0 :(得分:4)
在模板匹配中,您处于匹配元素的上下文中。因此,如果您尝试获取属性的值,您所要做的就是:
<xsl:value-of select="@rdf:resource"/>
您当前在select属性中使用的路径以“/”开头,因此是从文档的根开始而不是相对于您所在位置的路径。无论在何处使用,它都将始终返回相同的值。
答案 1 :(得分:1)
您不确定您显示的XSLT是否真的是您正在使用的XSLT。你发布它的方式,它无法编译。 xsl:apply-templates
行与xsl:template
行位于同一级别吗? xsl:text
真的包含xsl:value-of
吗?如果是这样,我会非常有兴趣了解您使用的处理器,因为没有处理器应该处理您的XSLT而不通知您错误。
也就是说,要改进样式表,请在答案中按Russel Leggett explains进行操作。而不是选择模板中的所有节点(从/
开始,从根目录中选择),而不是从当前节点中选择。得到他的答案并删除xsl:text
错误,你得到了这个:
<xsl:template match="j.0:property">
<xsl:value-of select="@rdf:resource"/>
</xsl:template>
使用XSLT 1.0,如果选择多个节点xsl:value-of
,它将仅输出第一个节点。因为你似乎确实有一个显然正在工作的xsl:apply-templates
,所以选择所有但只返回第一个(代码中以/
开头的那个)的那一行将被调用三次在xsl:apply-templates
。
为了帮助您进一步,更好,请展示我们可以针对您的示例数据运行的完整XSLT样式表的最小示例。
答案 2 :(得分:0)
这一行错了:
<xsl:text><xsl:value-of select="/rdf:RDF/rdf:Description/j.0:propert /@rdf:resource"/></xsl:text>
当您到达模板时,您处于所选项目中,因此您只需要:
<xsl:value-of select="@rdf:resource" />