我想将blogcategory ParentID与Parent id匹配。 这是我的代码:
<?xml version="1.0" encoding="utf-8"?>
<BlogCategories>
<BlogCategory ID="1" ParentID="0" Name="Travel" Active="1" seo_keywords="Travel Blogs" seo_description="Travel Blogs" ParentName=""/>
<BlogCategory ID="13" ParentID="1" Name="Destinations" Active="1" seo_keywords="Destinations" seo_description="Destinations" ParentName="Travel"/>
<Parent Id="1" ParentName="Travel"/>
<Parent Id="2" ParentName="HealthCare"/>
</BlogCategories>
这是我的.xslt页面:
<xsl:for-each select="Parent">
<div class="grid-row3">
<ul>
<a href="">
<xsl:value-of select="@ParentName"></xsl:value-of>
</a>
<xsl:for-each select="/BlogCategories/BlogCategory">
<xsl:if test="@ParentID=@ID">
<li>
<a href="">
<xsl:value-of select="@Name"></xsl:value-of>
</a>
</li>
</xsl:if>
</xsl:for-each>
</ul>
</div>
</xsl:for-each>
问题是阻止类别(<BlogCategory ID="1" ParentID="0" Name="Travel" Active="1" seo_keywords="Travel Blogs" seo_description="Travel Blogs" ParentName=""/>)
)的ParentID与父(<Parent Id="1" ParentName="Travel"/>
)的ID不匹配
即。如果我手动<xsl:if test="@ParentID=1">
然后它会工作..但如果我做同样的事情..然后问题出在这里:<xsl:if test="@ParentID=@ID">
我如何匹配@ParentID=@ID
答案 0 :(得分:0)
尝试更换:
<xsl:for-each select="/BlogCategories/BlogCategory">
使用:
<xsl:for-each select="/BlogCategories/BlogCategory[@ParentID = current()/@Id]">
然后你根本不需要xsl:if
指令。
尝试执行此操作的方式只有在调用Parent/@Id
之前将xsl:for-each
值存储在变量中时才有效 - 因为xsl:for-each
指令会更改上下文。
另一个选项(最好是恕我直言)是使用key来解决交叉引用。
另请注意,XML区分大小写:您无法使用@ID
选择名为Id
的属性。
答案 1 :(得分:0)
另一种方法是使用Id parent:
创建变量<xsl:variable name="Id" select="@Id" />
并通过以下方式修改您的条件:
<xsl:if test="@ParentID=$Id">
完整代码:
<xsl:for-each select="Parent">
<xsl:variable name="Id" select="@Id" />
<div class="grid-row3">
<ul>
<a href="">
<xsl:value-of select="@ParentName"></xsl:value-of>
</a>
<xsl:for-each select="/BlogCategories/BlogCategory">
<xsl:if test="@ParentID=$Id">
<li>
<a href="">
<xsl:value-of select="@Name"></xsl:value-of>
</a>
</li>
</xsl:if>
</xsl:for-each>
</ul>
</div>
</xsl:for-each>