簡體   English   中英

使用XSLT將XML轉換為表

[英]Transform XML to table with XSLT

我有一個XML其中包含這樣的數據:

<?xml version="1.0" encoding="utf-8"?>
<dataset  xmlns:xs="http://www.w3.org/2001/XMLSchema-instance">
    <metadata>
          <item name="Revenue" type="xs:decimal" scale="2" precision="31"/>
          <item name="Month" type="xs:short" precision="1"/>
    </metadata>
    <data>
        <row>
            <value currency="USD">100000</value>
            <value>1</value>
        </row>
        <row>
            <value currency="USD">200000.16</value>
            <value>2</value>
        </row>
        <row>
            <value currency="USD">150000.9</value>
            <value>3</value>
        </row>
        <row>
            <value currency="USD">180000.07</value>
            <value>4</value>
        </row>
    </data>
</dataset>

我想將此XML轉換為HTML表,如下所示:

<table border="1">
  <tr bgcolor="#9acd32">
    <th style="text-align:left">Revenue</th>
    <th style="text-align:left">Month</th>
  </tr>
  <tr>
    <td>100000</td>
    <td>1</td>
  </tr>
  <tr>
    <td>200000.16</td>
    <td>2</td>
  </tr>
  <tr>
    <td>150000.9</td>
    <td>3</td>
  </tr>
  <tr>
    <td>180000.07</td>
    <td>4</td>
  </tr>
</table>

誰能告訴我該怎么做? 謝謝。

該樣式表可以做到:

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

    <xsl:output method="html"/>

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

    <xsl:template match="metadata">
        <tr bgcolor="#9acd32">
            <th style="text-align:left"><xsl:value-of select="item[1]/@name"/></th>
            <th style="text-align:left"><xsl:value-of select="item[2]/@name"/></th>
        </tr>
    </xsl:template>

    <xsl:template match="row">
        <tr><xsl:apply-templates /></tr>
    </xsl:template>

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

</xsl:stylesheet>

它是這樣工作的:

處理器將讀取模板中的每個節點。 從根/ (有一個隱式模板)開始,它將處理每個節點,如果有匹配的模板,它將根據該模板轉換節點。

如果模板中包含<xsl:apply-templates>元素,則該模板可以允許其他節點的遞歸處理。 因此,處理器查找dataset ,將其與第一個模板匹配,添加<table>元素,然后在表內部將處理器發送到下一個模板。 它將處理metadata並完成該子樹,然后將處理data 由於data沒有顯式匹配模板,因此它再次使用默認的隱式模板,該模板與每個沒有顯式模板的可到達節點匹配。 該模板允許處理樹的其余部分,包含apply-templatesrowvalue

模板被處理了幾次以呈現最終的HTML。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM