Turn XML data to HTML table with XSLT

纵饮孤独 提交于 2020-01-17 14:44:07

问题


I need to be able to turn a flat xml data sets into html tables, and I'm having trouble finding syntax examples that will fit my need. I would like to use one stylesheet that can convert similar looking data sets into html tables with variable columns. this is a part of my XML File :

<?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet type="text/xsl" href="XSLT_StyleSheet.xsl"?> <Services>

  <Service WsdlUrl="http://venus.eas.asu.edu/WSRepository/Services/BasicThreeSvc/Service.svc">
    <Name>ServiceName</Name>
    <Provider></Provider>
    <Category>CatName</Category>
    <Operations>
      <Operaion>
        <Name>HelloWorld</Name>
        <MsgIn>elloWorldInputMessage</MsgIn>
        <MsgOut>HelloWorldOutputMessage</MsgOut>
      </Operaion>
      <Operaion>
        <Name>OP2name</Name>
        <MsgIn>InputMessage</MsgIn>
        <MsgOut>OutputMessage</MsgOut>
      </Operaion>
 <Operaion>
        <Name>Op3Name</Name>
        <MsgIn>InputMessage</MsgIn>
        <MsgOut>OutputMessage</MsgOut>
      </Operaion>     
    </Operations>

this how the HTML table must look Like:


回答1:


If you did not find examples of transforming XML to HTML with XSLT, then you didn't look very hard. That's one of its primary motivations. Anyway, this should get you started:

<?xml version="1.0" encoding="utf-8"?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>

    <xsl:template match="node()|@*"/>

    <xsl:template match="/Services">
        <html>
            <head>
                <title>XSLT example</title>
            </head>
            <body>
                <xsl:apply-templates/>
            </body>
        </html>
    </xsl:template>

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

    <xsl:template match="Operations">
        <table>
            <thead>
                <tr>
                    <td>Name</td>
                    <td>Description</td>
                    <td>Type</td>
                </tr>
            </thead>
            <tbody>
                <xsl:apply-templates/>
            </tbody>
        </table>
    </xsl:template>

    <xsl:template match="Operaion"> <!-- [sic] -->
        <xsl:variable name="service" select="ancestor::Service"/>

        <tr>
            <td><xsl:value-of select="$service/Name"/></td>
            <td><xsl:value-of select="Name"/></td>
            <td><xsl:value-of select="$service/Category"/></td>
        </tr>
    </xsl:template>

</xsl:transform>

Output on your (corrected) document (it was missing end tags):

<html>
    <head>
        <title>XSLT example</title>
    </head>
    <body>
        <table>
            <thead>
                <tr>
                    <td>Name</td>
                    <td>Description</td>
                    <td>Type</td>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>ServiceName</td>
                    <td>HelloWorld</td>
                    <td>CatName</td>
                </tr>
                <tr>
                    <td>ServiceName</td>
                    <td>OP2name</td>
                    <td>CatName</td>
                </tr>
                <tr>
                    <td>ServiceName</td>
                    <td>Op3Name</td>
                    <td>CatName</td>
                </tr>
            </tbody>
        </table>
    </body>
</html>


来源:https://stackoverflow.com/questions/19713101/turn-xml-data-to-html-table-with-xslt

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!