我相对较新的XSLT我需要根据当前帖子使用pauthorid的帖子选择作者元素(key:aid)。
作者的XML
<a:authors>
<a:author aid="a1">
<a:name>Brian Muscat</a:name>
<a:username>bmuscat</a:username>
<a:password>abc123</a:password>
<a:email>bm661@live.mdx.ac.uk</a:email>
</a:author>
</a:authors>
帖子的xml
<posts>
<post pid="p1">
<ptitle>CLOUD COMPUTING</ptitle>
<pfeatureimage>aaig.jpg</pfeatureimage>
<ptext xml:lang="en">text</ptext>
<pdate>25/06/2013</pdate>
<pimg>cloud.jpg</pimg>
<pimg>cloud.jpg</pimg>
<pauthorid>a1</pauthorid>
</post>
</posts>
我写的xslt到现在为止
<xsl:for-each select="posts/post">
<div class="post">
<div style="margin-top:20px; margin-right:20px; float:right;"> <span class="text" style="float:right;">Posted On:<xsl:value-of select="pdate"/></span></div>
<h3><xsl:value-of select="ptitle"/></h3>
<div style="padding:10px; height:60px; margin-top:-20px;">
<span class="text"><xsl:value-of select="ptext"/>
<xsl:variable name="aid" select="pauthorid" />
<!--The Problem is here-->
<xsl:for-each select="//a:authors/a:author[@aid=$aid]">
<xsl:value-of select="a:name" />
</xsl:for-each>
</span>
</div>
</div>
<br />
</xsl:for-each>
答案 0 :(得分:1)
我猜你在谈论一个xml文件。 添加样式表和模板标记后,您的代码是正确的。您只需要声明“a”前缀对应的命名空间(这是一个示例声明)。
我已将您的for-each语句更改为“// posts / post”以便我可以测试,这完全取决于您的初始xml和xsd。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:a="http://www.tibco.com/schemas/test/XSL_test/localschema" version="1.0">
<xsl:template match="/">
<xsl:for-each select="//posts/post">
<div class="post">
<div style="margin-top:20px; margin-right:20px; float:right;">
<span class="text" style="float:right;">Posted On:<xsl:value-of select="pdate"/>
</span></div>
<h3><xsl:value-of select="ptitle"/></h3>
<div style="padding:10px; height:60px; margin-top:-20px;">
<span class="text"><xsl:value-of select="ptext"/>
<xsl:variable name="aid" select="pauthorid" />
<xsl:for-each select="//a:authors/a:author[@aid=$aid]">
<xsl:value-of select="a:name" />
</xsl:for-each>
</span>
</div>
</div>
<br />
</xsl:for-each>
</xsl:stylesheet>