特定于XML节点的XSLT

时间:2015-06-15 12:43:19

标签: xml xslt xpath

我正在尝试为树结构化XML编写XSLT

我的XML就像打击一样:

  <?xml version="1.0" encoding="UTF-8"?>
    <product>
       <auto>
          <admin>
              <date>2015</date>
              <subject>
                 <id>1</id>        
              </subject>
          </admin>
          <report>
             <Fname>John</Fname>
          </report>
      </auto>
      <auto>
        <admin>
           <date>02/02/2015</date>
           <subject>
              <id>1</id>       
          </subject>
       </admin>
       <report>
          <Fname>Jack</Fname>
       </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">
        <![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"/>
    </ul>
  </xsl:template>
  <xsl:template match="date">
     <li style="display:none;">
        <xsl:value-of select="concat('Date : ',.)"/>
     </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: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 style="display:none;">
          <xsl:apply-templates select='*'/>
       </ul>
      </li>
    </xsl:template>
  </xsl:stylesheet>

运行此代码后,数据将显示如下

  John
  Jack

点击John

  John
     Admin
   Jack

现在点击Admin

  John
     Admin
       Date: 2015
       Subject: 
          ID: 1
  Jack

这里我想在“主题”节点下显示“ID”,在其“主体”节点的“点击”上显示,但是在点击“管理”节点时显示它。

如何控制此操作。如何控制节点特定的操作

我可能会反复发布这个问题。请帮我解决这个问题。

这是html,我使用Jquery

实现此功能
 $('.expand').click(function() {
  $('ul', $(this).parent()).eq(0).toggle();
  });

ul li ul {
  display: none;
  }

<script    src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
 <ul>
  <li>
    <a class="expand">Root</a>
     <ul>
       <li>
         <a class="expand">Child</a>
          <ul>
           <li>
             <a class="expand">Super Child</a>
           </li>
         </ul>
       </li>
     </ul>
  </li>
</ul>

请帮助我..如何实现相同的i xslt

0 个答案:

没有答案