2015-06-11 2 views
0

Я преобразовываю XML в HTML с помощью XSLT.XSLT для множественной структуры ребенка

Вот мой код работает

 <?xml version="1.0" encoding="UTF-8"?> 
    <product> 
     <auto> 
      <admin> 
      <date>2015</date> 
      <age>28</age> 
      <level>3</level> 
      <subject> 
       <id>1</id>   
      </subject> 
      </admin> 
      <report> 
      <Fname>John</Fname> 
      <Lname>AA</Lname> 
      <subject> 
       <id>1</id>   
      </subject> 
      </report> 
     </auto> 
     <auto> 
      <admin> 
      <date>02/02/2015</date> 
      <age>29</age> 
      <level>2</level> 
      <subject> 
       <id>1</id>  
      </subject> 
      </admin> 
      <report> 
      <Fname>Jack</Fname> 
      <Lname>BB</Lname> 
      </report> 
     </auto> 
    </product> 

Вот мой Running 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"> 
     <![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> 
    </head> 
    <body> 
    <h1>Example</h1> 
    <xsl:apply-templates/> 
    </body> 
    </html> 
    </xsl:template> 
    <xsl:template match="product/auto"> 
    <ul> 
    <a onclick="toggleDisplayAll(this.parentNode.getElementsByTagName('ul')); 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="date"> 
    <li style="display:none;"> 
    <xsl:value-of select="concat('Date : ',.)"/> 
    </li> 
</xsl:template> 
<xsl:template match="age"> 
    <li style="display:none;"> 
    <xsl:value-of select="concat('Age : ',.)"/> 
    </li> 
</xsl:template> 
<xsl:template match="level"> 
    <li style="display:none;"> 
    <xsl:value-of select="concat('Level : ',.)"/> 
    </li> 
</xsl:template> 
<xsl:template match="id"> 
    <li style="display:none;"> 
    <xsl:value-of select="concat('ID : ',.)"/> 
    </li> 
</xsl:template> 
<xsl:template match="subject"> 
    <li style="display:none;"> 
     <a onclick="toggleDisplayAll(this.parentNode.getElementsByTagName('li')); return false;" href="#"> 
      <xsl:text>Subject: </xsl:text> 
     </a> 
     <ul> 
      <xsl:apply-templates select='*'/> 
     </ul> 
    </li> 
    </xsl:template> 
    <xsl:template match="admin"> 
    <ul style="display:none;"> 
     <a onclick="toggleDisplayAll(this.parentNode.getElementsByTagName('li')); return false;" href="#"> 
     <xsl:text>Admin: </xsl:text> 
     </a> 
     <ul style="display:none;"> 
     <xsl:apply-templates select='*'/> 
     </ul> 
    </ul> 
    </xsl:template> 
    </xsl:stylesheet> 

Это возвращает меня как

 John 
    Jack 

после щелчка на Джона

 John 
     . Admin:    
    Jack 

По щелчку Админа

 John 
     . Admin: 
      . Date: 2015 
      . Age: 28 
      . Level: 3 
      . Subject:    
    Jack 

но Субъект ссылку, я хочу, чтобы отобразить идентификатор в качестве дочернего элемента по щелчку его как ниже

 John 
     . Admin: 
      . Date: 2015 
      . Age: 28 
      . Level: 3 
      . Subject: 
        .Id: 1    
    Jack 

ответ

0

Добавить шаблон для даты, возраста, уровня, идентификатора, состояния и страны. Затем примените шаблон к дочерью администратора и сообщите вместо значения.

К «добавить шаблон», я имею в виду (не проверял, может иметь «опечатку»):

<xsl:template match="date"> 
    <li><xsl:value-of select="concat('Date : ',.)"/></li> 
</xsl:template> 

Добавить подобные шаблоны для каждого элемента (на самом деле вы можете использовать один общий, который может использовать имя элемента , но старался оставаться простым в своем ответе).

Затем шаблон админ:

<xsl:template match="admin"> 
<ul style="display:none;"> 
    <li> 
    <xsl:text>Admin: </xsl:text> 
    <xsl:apply-templates select='*'/> 
    <br/> 
    </li> 
</ul> 
</xsl:template> 

Сделайте то же самое для шаблона отчета.

+0

Спасибо, что ответили на вопрос Эрика, я попробовал добавить, как вы предлагали, но он дает мне те же данные. Пожалуйста, взгляните на сделанные изменения и предложите мне, где я сделал неправильно. – user1893874

+0

Это мое первое задание в XSLT, так что вам нужна ваша помощь здесь. – user1893874

+0

Проблемы в HTML-вывод, я думаю. Что вы хотите использовать для вывода html? –

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