如何在xsl中获取子节点

时间:2011-01-13 14:35:08

标签: asp.net xslt

这里是我的代码 -

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:template match="ArrayOfLinkEntity" name="bindLink">
  <ul>
   <xsl:for-each select="LinkEntity[ParentLinkId=0]">
     <li>
       <xsl:variable name="linkId" select="LinkId"/>
       <xsl:variable name="child" select="count(/ArrayOfLinkEntity/LinkEntity[ParentLinkId=$linkId])"/>
       <xsl:value-of select="$child"/>
       <xsl:choose>
         <xsl:when test="($child &gt; 0)">
           <a href="#"  data-flexmenu="flexmenu1" onclick="javascript:setPageLinkId({$linkId});">
             <xsl:value-of select="LinkTitle"/>
             <img src="../images/down.gif" border="0"/>
           </a>
         </xsl:when>

         <xsl:otherwise >
           <a href="#" onclick="javascript:setPageLinkId({$linkId});">
             <xsl:value-of select="LinkTitle"/>
           </a>
         </xsl:otherwise>
       </xsl:choose>
     </li>
   </xsl:for-each>
  </ul>
 </xsl:template>
</xsl:stylesheet>

但我总是得到$ child = 0。但是有孩子。 我的xml结构 -

<ArrayOfLinkEntity xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <LinkEntity>
    <EntityId>00000000-0000-0000-0000-000000000000</EntityId> 
    <LinkId>1</LinkId> 
    <SequenceNo>1</SequenceNo> 
    <ParentLinkId>0</ParentLinkId> 
    <LinkTitle>Home</LinkTitle> 
    <SubLink />
  </LinkEntity> ...  
</ArrayOfLinkEntity>

我该怎么办?请建议。

2 个答案:

答案 0 :(得分:1)

  

但我得到$ child = 0 always.but   有孩子。

如果“孩子”是指LinkEntity ParentLinkId孩子等于当前节点的LinkId,则得到的结果是正确的。

唯一的LinkEntityLinkId 1,但提供的XML文档中没有LinkEntity个元素ParentLinkId为1。

您需要显示一个完整(但尽可能短)的XML文档,您的代码会在该文档中显示此问题。没有能够重现问题,没有人能给你一个合乎逻辑的建议。

答案 1 :(得分:0)

来自以下代码:

<xsl:variable name="linkId" select="LinkId"/>
      <xsl:variable name="child" select="count(/ArrayOfLinkEntity/LinkEntity[ParentLinkId=$linkId])"/>

这发生在for-each循环中,其中循环的唯一节点是LinkEntity的ParentLinkId = 0.但是从源XML,LinkId的值= 1,并且在$ child的变量赋值中,您正在选择在LinkEntity上使用ParentLinkId = 1,这在源XML数据中不存在。

如果我误解了某些内容请告诉我,但从我看到的可能是问题。

相关问题