2016-07-28 32 views
0

匹配两段ID我想匹配的blogcategory PARENTID与父母ID .. 这里是我的代码:IF在XSLT语句中BlogCategories

<?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="@[email protected]"> 
      <li> 
      <a href=""> 
       <xsl:value-of select="@Name"></xsl:value-of> 
      </a> 
      </li> 
     </xsl:if> 
     </xsl:for-each> 
    </ul> 
    </div> 
     </xsl:for-each> 

的问题是,块的类(的PARENTID <BlogCategory ID="1" ParentID="0" Name="Travel" Active="1" seo_keywords="Travel Blogs" seo_description="Travel Blogs" ParentName=""/>)不匹配父(<Parent Id="1" ParentName="Travel"/>

即ID如果我手动执行<xsl:if test="@ParentID=1">那么如果我做同样的事情会work..but ..then的问题是在这里:<xsl:if test="@[email protected]">

我如何匹配@[email protected]

回答

0

尝试更换:

<xsl:for-each select="/BlogCategories/BlogCategory"> 

有:

<xsl:for-each select="/BlogCategories/BlogCategory[@ParentID = current()/@Id]"> 

然后你根本不需要xsl:if指令。

如果您在调用xsl:for-each之前已将Parent/@Id值存储在变量中,则因为xsl:for-each指令更改了上下文,所以您只能尝试这样做。

另一个选项(最好是恕我直言)是使用key来解决交叉引用。也


注意,XML是区分大小写的:你不能用@ID选择名为Id的属性。

0

另一种方法是创建一个ID父变量:

<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>