使用XSLT解析简单的XML文件时遇到问题

时间:2016-09-08 01:15:29

标签: xml xslt formatting

XSLT:

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:ps="http://schemas.microsoft.com/powershell/2004/04"
    exclude-result-prefixes="ps">
    <xsl:template match="/">

        <div id="reports">

            <xsl:call-template name="report">
                <xsl:with-param name="report" select="." />
                <xsl:with-param name="heading">Today</xsl:with-param>
            </xsl:call-template>
        </div>
    </xsl:template>
    <xsl:template name="report">
        <table border="1" cellpadding="4">
            <thead>
                <tr class="subheads">
                    <td>IP</td>
                    <td>Hits</td>
                </tr>
            </thead>
            <tbody>
                <xsl:for-each select="$report/ps:Objs/ps:Obj/ps:Props">
                    <xsl:sort select="Hits" order="descending" data-type="number" />
                    <tr>
                        <xsl:attribute name="class">
                            <xsl:choose>
                                <!-- Even rows get the alt-row  class -->
                                <xsl:when test="position() mod 2 =  0">alt row</xsl:when>
                            </xsl:choose>
                            <xsl:if test="Hits &gt; 1000"> alert</xsl:if>
                        </xsl:attribute>
                        <td><xsl:value-of select="ps:S[@N='Name']"/></td>
                        <td><xsl:value-of select="ps:I32[@N='Count']"/></td>
                    </tr>
                </xsl:for-each>
            </tbody>
        </table>
    </xsl:template>

</xsl:stylesheet>

XML文件:http://pastebin.com/Nzq6bC9b

(我没有直接包含XML,因为我似乎无法清楚地将其格式化)

我被要求帮助正确地从XML文件中提取XSLT文档并创建包含数据的表。我以前没有使用XSLT的经验,并且已经搜索了很多尝试完成我的任务。我见过很多例子,但我找不到任何显示如何从像我这样格式化的文件中提取的例子。如果有人可以帮助我,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

首先想一想,请提供完整且结构良好的文件,如Minimal, Complete and Verifiable example,如michael.hor257k和Michael Kay之前提到的。

通过Pastebin链接的XML文件是错误的,导致根元素objs未关闭。

将您的命名模板更改为以下内容:

<xsl:template name="report">
    <xsl:param name="report"/>
    <xsl:param name="heading"/>
    ...
</xsl:template>

<强>结果

<div id="reports">
    <table border="1" cellpadding="4">
        <thead>
            <tr class="subheads">
                <td>IP</td>
                <td>Hits</td>
            </tr>
        </thead>
        <tbody>
            <tr class="">
                <td>"16.249.75.135,</td>
                <td>87319</td>
            </tr>
            <tr class="alt row">
                <td>"26.249.91.195,</td>
                <td>22510</td>
            </tr>
            <tr class="">
                <td>"16.249.69.8,</td>
                <td>6370</td>
            </tr>
            <tr class="alt row">
                <td>"68.181.230.228,</td>
                <td>3818</td>
            </tr>
        </tbody>
    </table>
</div>