0

XML 構造の変換に問題があります。

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="ceva.xsl"?>
<!-- Edited by XMLSpy® -->
<reports>
    <report_head>
        <value>product_id</value>
        <value>product_name</value>
    </report_head>
    <report_data>
        <value>1</value>
        <value>PRODUCT NAME NO 43</value>
    </report_data>
    <report_data>
        <value>2</value>
        <value>PRODUCT NAME NO 56</value>
    </report_data>
    <report_data>
        <value>3</value>
        <value>PRODUCT NAME NO 65</value>
    </report_data>
</reports>

のようなテーブルに

<table>
    <tr>
        <td>product_id</td>
        <td>product_name</td>
    </tr>
    <tr>
        <td>1</td>
        <td>PRODUCT NAME NO 43</td>
    </tr>
    <tr>
        <td>2</td>
        <td>PRODUCT NAME NO 56</td>
    </tr>
    <tr>
        <td>3</td>
        <td>PRODUCT NAME NO 65</td>
    </tr>
</table>

ここに私が使用しているXSLがあります:

<?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>Transform a table</h2>

        <!--
        <table border="1">
            <tr>
                <xsl:for-each select="reports/report_head/value">
                    <td><xsl:value-of select="."/></td>
                </xsl:for-each>
            </tr>


            <xsl:for-each select="reports/report_data/value">
            <tr>
                <td><xsl:value-of select="."/></td>
            </tr>
            </xsl:for-each>
        </table>
        -->

        <table border="1">
            <tr>
            <xsl:apply-templates/>
            </tr>
        </table>

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

    <!--

    <xsl:template match="value">

        <tr>
            <td><xsl:value-of select="."/></td>
        </tr>

    </xsl:template>
    </table>
    -->

    <xsl:template match="value">
        <td>
        <xsl:value-of select="."/>
        </td>
    </xsl:template>
</xsl:stylesheet>

しかし、待ってください。もっとあります。列がいくつあるかわかりません。典型的なレポートには 10 列ほどあるかもしれませんが、20、30 列以上になることもあるため、xslt はこれを動的に行う必要があります。

を試しfor-eachましたが、誰かが の使用を提案しましたtemplateが、結果は得られませんでした。私は今何をしなければなりませんか?

ありがとう。

4

2 に答える 2

3

これは私にとってはうまくいくようでした:

<?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>Transform a table</h2>

        <table border="1">
            <xsl:apply-templates/>
        </table>

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

    <xsl:template match="report_data | report_head">
        <tr>
          <xsl:apply-templates/>
        </tr>
    </xsl:template>

    <xsl:template match="value">
        <td>
        <xsl:value-of select="."/>
        </td>
    </xsl:template>

</xsl:stylesheet>
于 2013-02-24T11:52:20.530 に答える
2

私はこの ( http://www.w3schools.com/xsl/tryxslt.asp?xmlfile=cdcatalog&xsltfile=cdcatalog ) 小さなツールをラピッド プロトタイピングに使用しました (詳細についてはhttp://www.w3schools.com/xsl/default.aspを参照してください)。 )。私があなたを正しく理解していれば、これでうまくいくと思います:

<?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>Transform a table</h2>

    <table border="1">
      <tr>
        <xsl:for-each select="reports/report_head/value">
          <td><xsl:value-of select="."/></td>
        </xsl:for-each>
      </tr>
      <xsl:for-each select="reports/report_data">
      <tr> 
        <xsl:for-each select="./value">
          <td><xsl:value-of select="."/></td>
        </xsl:for-each>
      </tr>
      </xsl:for-each>
    </table>

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

編集#1:置き忘れを修正</tr>

このテーブルを生成します...

product_id  product_name 
1           PRODUCT NAME NO 43 
2           PRODUCT NAME NO 56 
3           PRODUCT NAME NO 65 

...そして、より多くの列でも作業しました。

それが役立つことを願っています! 乾杯

于 2013-02-24T12:05:51.950 に答える