-3

複雑なXMLがあり、それをHTMLに変換する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>

他の情報をどのように取得するかわかりません。すべてを1つのテーブルにまとめたいのです。それぞれの内部でやってみ<xsl:for-each>ましたが、うまくいきません。

4

2 に答える 2

0

このXSLTを試してください:

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

あなたの例に適用すると、これが生成されます:

<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で見つかったさまざまな可能な詳細レベルに一致するさまざまなテンプレートを用意することです。各テンプレートは、多かれ少なかれセルを持つテーブル行を生成します。

于 2012-05-15T20:51:26.913 に答える
-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> 
于 2012-05-16T15:46:01.870 に答える