阅读使用XSLT

问题描述:

标签或元素的多个实例,我的RDF XML文件是这样的..阅读使用XSLT

<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

@shashank saket:选择要使用的问题之一,并删除其他。如果你不能放下,在另一个指向另一个问题的问题上添加一行作为重复。这使得网站保持干净(你的双重q:http://stackoverflow.com/questions/2597887/xslt-reading-multiple-instances-of-a-tag)。 – Abel 2010-04-08 08:29:17

在模板匹配内部,您位于匹配元素的上下文中。因此,如果你想获得一个属性的值,所有你需要做的是:

<xsl:value-of select="@rdf:resource"/> 

你目前正在使用你选择的属性的路径以“/”开头,因此路径开始文档的根,而不是相对于你的位置。无论它在哪里使用,它都会返回相同的值。

+0

谢谢你!!!!它的工作...真棒! – 2010-04-08 08:54:55

+0

这是指标记,其中问题确实不使用相对路径,而是绝对路径,导致第一个匹配被用于value-of。 – 2010-04-08 08:55:49

+0

请注意''xsl:value-of'不能用在'xsl:text'内,正如我在我的回答中所解释的。该行显示在q中。无法编译。 – Abel 2010-04-08 09:02:29

此行是错误的:

<xsl:text><xsl:value-of select="/rdf:RDF/rdf:Description/j.0:propert /@rdf:resource"/></xsl:text> 

当你到你所选择的项目是兴田模板,所有你需要的是:

<xsl:value-of select="@rdf:resource" /> 
+0

这条线确实是错的。但是解决方法(不幸的是):在'xsl:text'里面,你不能有'xsl:value-of'语句(或者任何元素)。 – Abel 2010-04-08 08:38:47

+0

非常感谢你们! – 2010-04-08 08:55:30

+0

@Abel - Doh,一天过早,我的xslt生锈了。现在修复。 – Murph 2010-04-08 10:05:55

它不能确定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样式表的一个简单示例。