как получить дочерние узлы в xsl - PullRequest
0 голосов
/ 13 января 2011

вот мой код-

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

1 голос
/ 13 января 2011

но я получаю $ child = 0 всегда. Но есть дети.

Если под "детьми" вы подразумеваете LinkEntity с ParentLinkId ребенком, который равенLinkId текущего узла, вы получите правильный результат.

Единственный LinkEntity имеет LinkId 1, но в предоставленном XML-документе нет элементов LinkEntity, чья ParentLinkId равно 1.

Вам необходимо показать полный (но самый короткий из возможных) XML-документ, в котором ваш код обнаруживает эту проблему.Не имея возможности воспроизвести проблему, никто не может дать вам логический совет.

0 голосов
/ 13 января 2011

Из вашего следующего кода:

<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-данных.

Если я что-то неправильно понял, сообщите мне, но из какогоЯ вижу, что это может быть проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...