我对xslt相对较新我需要根据当前帖子的pid使用哪个帖子选择评论元素
部分XSLT我遇到问题
<xsl:for-each select="posts/post">
<div class="post">
<h3><xsl:value-of select="ptitle"/></h3>
<span><xsl:value-of select="ptext"/></span>
<xsl:variable name="pid" select="@pid" />
<!-- Here i need to select the comment according to the pid -->
</div>
<br />
</xsl:for-each>
XML代码
<posts>
<post pid="p2">
<ptitle>APPLICATIONS OF THE FUTURE</ptitle>
<pfeatureimage>aig.jpg</pfeatureimage>
<ptext xml:lang="en">just text </ptext>
<pdate>25062013</pdate>
<pimg>future.jpg</pimg>
<pimg>future.jpg</pimg>
<pimg>future.jpg</pimg>
<pauthorid>a3</pauthorid>
</post>
</posts>
<comments>
<comment cid="c1">
<pid>p2</pid>
<uid>u2</uid>
<ctext>other t</ctext>
<likes>5</likes>
<dislikes>1</dislikes>
</comment>
<comment cid="c2">
<pid>p3</pid>
<uid>u2</uid>
<ctext>bogsg</ctext>
<likes>5</likes>
<dislikes>1</dislikes>
</comment>
</comments>
答案 0 :(得分:3)
在XSLT中处理任何交叉引用问题的方法是使用key。您将键定义放在样式表的顶层(在任何模板之外):
<xsl:key name="commentsByPid" match="comment" use="pid" />
match
表达式确定要查看的节点,use
是相对于每个匹配节点计算的路径,以确定键值(因此在这种情况下,它将采用字符串每个匹配的pid
内的comment
元素的值。
使用此键定义,您可以使用pid
函数有效地查找与当前帖子的key
属性匹配的所有评论:
<xsl:for-each select="posts/post">
<div class="post">
<h3><xsl:value-of select="ptitle"/></h3>
<span><xsl:value-of select="ptext"/></span>
<xsl:for-each select="key('commentsByPid', @pid)">
<!-- do whatever you need with the <comment> here -->
</xsl:for-each>
</div>
<br />
</xsl:for-each>
答案 1 :(得分:0)
对于单个评论,请替换您的变量定义
<xsl:variable name="pid" select="@pid" />
通过
<xsl:value-of select="//comments/comment[pid=current()/@pid]/ctext" />
如果您有多条评论,可以尝试
<xsl:variable name="pid" select="@pid" />
<xsl:for-each select="//comments/comment[pid=$pid]">
<xsl:value-of select="ctext" />
</xsl:for-each>