2012-05-15 5 views
-3

복잡한 XML이 있는데 HTML로 변환하는 XSL 변환을 작성하려고합니다. 누군가 나를 도와 줄래?복잡한 XML의 XSL 변환

여기 여기에 XML

<?xml version="1.0" encoding="iso-8859-1"?> 
<?xml-stylesheet type="text/xsl" href="Mbooks.xsl"?> 
<project> 
    <books> 
    <bookName>Eclpise</bookName> 
    <bookCount>3</bookCount> 
    <Data> 
     <NEW> 
     <bookNumber>book3687110</bookNumber> 
     <ISBN>927fd6ca660e5a9</ISBN> 
     <Isbninfo> 
      <IsbninfoDetails> 
      <IsbninfoName>new book</IsbninfoName> 
      <IsbninfoVersion>version 1</IsbninfoVersion> 
      </IsbninfoDetails> 
      <IsbninfoDetails> 
      <IsbninfoName> new book 1</IsbninfoName> 
      <IsbninfoVersion>version 2</IsbninfoVersion> 
      </IsbninfoDetails> 
     </Isbninfo> 
     </NEW> 
     <NEW> 
     <bookNumber>book3674796</bookNumber> 
     <ISBN>6fa276825144</ISBN> 
     <Isbninfo> 
      <IsbninfoDetails> 
      <IsbninfoName>new book 3</IsbninfoName> 
      <IsbninfoVersion>version 3</IsbninfoVersion> 
      </IsbninfoDetails> 
      <IsbninfoDetails> 
      <IsbninfoName>new book 4</IsbninfoName> 
      <IsbninfoVersion>version 4</IsbninfoVersion> 
      </IsbninfoDetails> 
     </Isbninfo> 
     </NEW> 
    </Data> 
    </books> 
    <books> 
    <bookName>ORACLE</bookName> 
    <bookCount>0</bookCount> 
    <Data> 
    </Data> 
    </books> 
    <books> 
    <bookName>MUSIC</bookName> 
    <bookCount>0</bookCount> 
    <Data> 

    </Data> 
    </books> 
</project> 

인 XSLT이다.

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet 
    version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:template match="/"> 
    <html> 
     <body> 
     <h2>BOOK_INFORMATION </h2> 
     <table style="display: inline-block; border: 1px solid; float: left; "> 
      <tr bgcolor="#FFA500"> 
      <th>book Name</th> 
      <th>book_Count</th> 
      <th>book_Number</th> 
      <th>ISBN</th> 
      <th>Isbninfo_Name</th> 
      <th>Isbninfo_Version</th> 
      </tr> 

      <xsl:for-each select="project/books"> 
      <tr> 
       <td> 
       <xsl:value-of select="bookName"/> 
       </td> 
       <td> 
       <xsl:value-of select="bookCount"/> 
       </td> 
      </tr> 
      </xsl:for-each> 

     </table> 

     </body> 
    </html> 
    </xsl:template> 

</xsl:stylesheet> 

는 내가 다른 정보를 얼마나 확실하지 않다 : 나는 하나 개의 테이블에서 모든 것을 할 수 있습니다. 나는 각각에 대해 <xsl:for-each>을 시도했지만 작동하지 않습니다. 귀하의 예제에 적용

<xsl:stylesheet 
    version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:template match="text()"> 
    </xsl:template> 

    <xsl:template match="IsbninfoDetails"> 
    <tr> 
     <td> 
     <xsl:value-of select="../../../../bookName"/> 
     </td> 
     <td> 
     <xsl:value-of select="../../../../bookCount"/> 
     </td> 
     <td> 
     <xsl:value-of select="../../bookNumber"/> 
     </td> 
     <td> 
     <xsl:value-of select="../../ISBN"/> 
     </td> 
     <td> 
     <xsl:value-of select="IsbninfoName"/> 
     </td> 
     <td> 
     <xsl:value-of select="IsbninfoVersion"/> 
     </td> 
    </tr> 
    </xsl:template> 

    <xsl:template match="books[not(Data/NEW)]"> 
    <tr> 
     <td> 
     <xsl:value-of select="bookName"/> 
     </td> 
     <td> 
     <xsl:value-of select="bookCount"/> 
     </td> 
    </tr> 
    </xsl:template> 

    <xsl:template match="NEW[not(Isbninfo/IsbninfoDetails)]"> 
    <tr> 
     <td> 
     <xsl:value-of select="../../bookName"/> 
     </td> 
     <td> 
     <xsl:value-of select="../../bookCount"/> 
     </td> 
     <td> 
     <xsl:value-of select="bookNumber"/> 
     </td> 
     <td> 
     <xsl:value-of select="ISBN"/> 
     </td> 
    </tr> 
    </xsl:template> 

    <xsl:template match="/"> 
    <html> 
     <body> 
     <h2>BOOK_INFORMATION </h2> 
     <table style="display: inline-block; border: 1px solid; float: left; "> 
      <tr bgcolor="#FFA500"> 
      <th>book Name</th> 
      <th>book_Count</th> 
      <th>book_Number</th> 
      <th>ISBN</th> 
      <th>Isbninfo_Name</th> 
      <th>Isbninfo_Version</th> 
      </tr> 
      <xsl:apply-templates/> 
     </table> 

     </body> 
    </html> 
    </xsl:template> 

</xsl:stylesheet> 

이 생산 :

답변

0

이 XSLT를 시도

<html> 
    <body> 
    <h2>BOOK_INFORMATION </h2> 
    <table style="display: inline-block; border: 1px solid; float: left; "> 
     <tr bgcolor="#FFA500"> 
     <th>book Name</th> 
     <th>book_Count</th> 
     <th>book_Number</th> 
     <th>ISBN</th> 
     <th>Isbninfo_Name</th> 
     <th>Isbninfo_Version</th> 
     </tr> 
     <tr> 
     <td>Eclpise</td> 
     <td>3</td> 
     <td>book3687110</td> 
     <td>927fd6ca660e5a9</td> 
     <td>new book</td> 
     <td>version 1</td> 
     </tr> 
     <tr> 
     <td>Eclpise</td> 
     <td>3</td> 
     <td>book3687110</td> 
     <td>927fd6ca660e5a9</td> 
     <td> new book 1</td> 
     <td>version 2</td> 
     </tr> 
     <tr> 
     <td>Eclpise</td> 
     <td>3</td> 
     <td>book3674796</td> 
     <td>6fa276825144</td> 
     <td>new book 3</td> 
     <td>version 3</td> 
     </tr> 
     <tr> 
     <td>Eclpise</td> 
     <td>3</td> 
     <td>book3674796</td> 
     <td>6fa276825144</td> 
     <td>new book 4</td> 
     <td>version 4</td> 
     </tr> 
     <tr> 
     <td>ORACLE</td> 
     <td>0</td> 
     </tr> 
     <tr> 
     <td>MUSIC</td> 
     <td>0</td> 
     </tr> 
    </table> 
    </body> 
</html> 

아이디어가 XML에있는 세부 사항의 다양한 가능한 수준에 맞는 다양한 템플릿을하는 것입니다 - 각 더 많거나 적은 셀들로 테이블 행을 생성하는 템플릿.

+0

안녕하세요. 답변을 주셔서 감사하지만 도서 이름, book_count, book_number 및 ISBN 번호를 중복 할 수 없으므로 행 간격과 같은 항목을 추가하여 적절한 표처럼 보이게 할 수 있습니까? 도움 주셔서 감사합니다. – Maxyie

+0

네, 물론 가능 합니다만, 당신이 원하는 정확히 무엇을 시도했는지, 그리고 당신이 시도한 것을 좀 더 정확하게 지정해야합니다. – MiMo

+0

혼란스러워서 죄송합니다. 필요한 필드가 중복되지 않는 적절한 테이블을 원합니다. 내가 foreach 루프 내부에서 foreach 루프를 사용하여 노력하고 있지만 그것은 자바 또는 펄 작동 방식으로 작동하지 않는 것 같아요. 나는 새 스레드에서 "html 예제를 추가했습니다"라고 대답했습니다. 여기에 DD하지 못했습니다. – Maxyie

-1
<html> 
<body>  
<h2>BOOK_INFORMATION </h2> 
    <table style="display: inline-block; border: 1px solid;  float: left; ">  
<tr bgcolor="#FFA500">   
<th>book Name</th>  
<th>book_Count</th>  
<th>book_Number</th>  
<th>ISBN</th>   
<th>Isbninfo_Name</th>  
<th>Isbninfo_Version</th> 
</tr>  
<tr>  
<td rowspan ="4">Eclpise</td>  
<td rowspan ="4">3</td>  
<td rowspan = "2">book3687110</td> 
    <td rowspan = "2">927fd6ca660e5a9</td>   
<td>new book</td> 
<td>version 1</td> 
</tr> 
<tr> 
<td>new book1</td> 
<td>version 2</td> 
</tr> 
<tr> 
<td rowspan ="2">book3674796</td>  
<td rowspan ="2">6fa276825144</td> 
<td>new book2</td> 
<td>version 3</td> 
</tr> 
<tr> 
<td>new book3</td> 
<td>version 4</td> 
</tr>  
<tr>  
<td>ORACLE</td> 
<td>0</td> 
</tr>  
<tr>  
<td>MUSIC</td> 
<td>0</td>  
</tr> 
</table> 
</body> 
</html>