将XML转换为XSLT

时间:2014-02-06 18:20:39

标签: xml xslt xslt-2.0

我必须从我已经完成的XML文件中创建一个XSLT,但我不知道是否有更好的方法可以更自动地完成我所做的那样。

这是我的解决方案:

XML:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Edited by XMLSpy -->
<onlinecomputer>
    <item name="Processor" price="100.00"/>
        <item name="USB driver" price="50.00"/>
        <item name="Webcam" price="20.50"/>
        <item name="Notebook" price="700.00"/>
        <place>
         <name>Prishtin</name>
           <customer>
                <name>Hana</name>
                <street> Nen Tereza</street>
                <order item="Processor" amount="1"/>
                <order item="USB driver" amount="3"/>
                <order item="Webcam" amount="3"/>
                <order item="Notebook" amount="2"/>
           </customer>
            <customer>
                <name>Ron</name>
                <street> blbl</street>
                <order item="Webcam" amount="1"/>
           </customer>
      </place>
        <place>
         <name>Tetove</name>
           <customer>
                <name>Edin</name>
                <street> gggg</street>
                <order item="Processor" amount="4"/>
                <order item="Notebook" amount="1"/>
           </customer>
            <customer>
                <name>Alex</name>
                <street> bbbb</street>
                <order item="Processor" amount="2"/>
           </customer>
      </place>
</onlinecomputer>

XSLT:

<?xml version="1.0" encoding="ISO-8859-1"?>

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
  <html>
  <body>
    <table border="1">
      <tr bgcolor="#9acd32">
        <th>Name</th>
        <th>City</th>
        <th>Order</th>
      </tr>
      <xsl:for-each select="onlinecomputer/place/customer/order">     
      <tr>
        <td><xsl:value-of select="../name"/></td>
        <td><xsl:value-of select="../../name"/></td>
        <td><xsl:value-of select="@item"/></td>
      </tr>      
      </xsl:for-each>
    </table>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>

如果有人可以帮助我,请这样做,因为明天我需要它。

1 个答案:

答案 0 :(得分:1)

你的方式很好。但是,还有另一种称为“简化样式表”的方法,您无需声明样式表或模板:

<html xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xsl:version="2.0">
<body>
    <table border="1">
        <tr bgcolor="#9acd32">
            <th>Name</th>
            <th>City</th>
            <th>Order</th>
        </tr>
        <xsl:for-each select="
        onlinecomputer/place/customer/order">     
            <tr>
                <td>
                    <xsl:value-of select="../name"/>
                </td>
                <td>
                    <xsl:value-of select="../../name"/>
                </td>
                <td>
                    <xsl:value-of select="@item"/>
                </td>
            </tr>      
        </xsl:for-each>
    </table>
</body>
</html>