xslt中的IF语句,用于匹配BlogCategories中的两个id

时间:2016-07-28 07:37:52

标签: c# xslt

我想将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

2 个答案:

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