2015-06-11 5 views
1

Мой XML, как показано ниже:XSLT не работает с дисплеем: нет

 <?xml version="1.0" encoding="UTF-8"?> 
     <product> 
     <auto> 
      <admin> 
       <date>01/01/2015</date> 
      </admin> 
      <report> 
       <Fname>John</Fname> 
       <Lname>ABC</Lname> 
      </report> 
     </auto> 
     <auto> 
      <admin> 
       <date>02/02/2015</date> 
      </admin> 
      <report> 
       <Fname>Tim</Fname> 
       <Lname>DEF</Lname> 
      </report> 
     </auto> 
    </product> 

мой XSLT, как показано ниже:

<?xml version="1.0" encoding="UTF-8"?> 
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"> 
     <html lang="en"> 
     <head> 
      <title>Example</title> 
      <script type="text/javascript"> function toggleDisplay(element) { element.style.display = element.style.display === 'none' ? '' : 'none'; }  </script> 
    </head> 
    <body> 
    <h1>Example</h1> 
    <xsl:apply-templates/> 
    </body> 
    </html> 
</xsl:template> 
    <xsl:template match="product/auto"> 
<ul> 
    <a onclick="toggleDisplay(this.parentNode.getElementsByTagName('ul')[0]); return false;" href="#"> 
    <xsl:value-of select="report/Fname"/> 
    </a> 
    <xsl:apply-templates select="admin"/> 
    <xsl:apply-templates select="report"/> 
</ul> 
    </xsl:template> 
    <xsl:template match="admin"> 
    <ul style="display:none;"> 
    <li> 
    Admin: <xsl:value-of select="date"/> 
    <br/> 
    </li> 
</ul> 
    </xsl:template> 
    <xsl:template match="report"> 
    <ul style="display:none;"> 
    Report: <xsl:value-of select="Lname"/> 
    <br /> 
    </ul> 
    </xsl:template> 
    </xsl:stylesheet> 

Я пытаюсь для отказа поставить в ниже:

Нагрузка Htm л только Fname будет отображаться как

John 
    Tim 

Оба имеющие ссылку, чтобы открыть ребенка OnClick на Джона, только админ показывает, как показано ниже

John 
    Admin: 01/01/2015 

Доклад: ABC не отображается.

Ожидаемое

John 
     Admin:01/01/2015 
     Report:ABC 

Если я удалить событие и дисплей: никто не показывает как Администратор и отчет.

Что я здесь делаю неправильно.

Пожалуйста, помогите мне здесь.

ответ

0

Это больше связано с проблемой javascript, чем с XSL. Вам просто нужно «переключить дисплей» все соответствующие элементы <ul> вместо только первого -The один в индексе 0-:

<a onclick="toggleDisplayAll(this.parentNode.getElementsByTagName('ul')); return false;" href="#"> 
    <xsl:value-of select="report/Fname"/> 
</a> 

И вмещать переключая несколько элементов в определении функции JS. Это единственный бит XML/XSL в этом ответе, вы можете обернуть JS-коды в пределах CDATA элементов только для удобства (чтобы избежать необходимости избегать специальных символов XML, таких как <, > и т. Д., Особенно когда функция становится все более сложной) :

<script type="text/javascript"> 
    <![CDATA[ 
    function toggleDisplay(element) 
    { 
     element.style.display = element.style.display === 'none' ? '' : 'none'; 
    }; 
    function toggleDisplayAll(elements) 
    { 
     for(var i=0; i<elements.length; i++){ 
      toggleDisplay(elements[i]); 
     } 
    } 
    ]]> 
</script> 
+0

Огромное спасибо. Теперь он работает отлично. – user1893874

Смежные вопросы