XSLT поддерживает порядок тегов при форматировании XML-документа - PullRequest
0 голосов
/ 06 декабря 2010

Проблема в том, что в документе XSLT ниже все мои теги hrow находятся внизу, я хочу, чтобы он поддерживал порядок, в котором они появляются, как мне это сделать?

мой документ xml

<log>
<hrow time="45:43:2343">A heading</hrow>
<row type="e">An error</row>
<row type="w">An warn</row>
<row type="i">An info</row>
<row type="d">An debug</row>
<row type="t">unknown</row>
<hrow time="45:43:2343">Another heading</hrow>
<row type="t">more rows</row>
</log>

документ xslt

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <table width="100%">
            <xsl:apply-templates />
        </table>
    </xsl:template>

    <xsl:template match="log">
            <xsl:apply-templates select="row" />
            <xsl:apply-templates select="hrow" />
    </xsl:template>

    <xsl:template match="row">
        <xsl:variable name="type" select="@type" />
        <xsl:choose>
            <xsl:when test="$type = 'd'">
                <tr>
                    <td style="background-color:#C6F98B">
                        <xsl:value-of select="." />
                    </td>
                </tr>
            </xsl:when>
            <xsl:when test="$type = 'i'">
                <tr>
                    <td style="background-color:#8B8BF9">
                        <xsl:value-of select="." />
                    </td>
                </tr>
            </xsl:when>
            <xsl:when test="$type = 'e'">
                <tr>
                    <td style="background-color:#F9555D">
                        <xsl:value-of select="." />
                    </td>
                </tr>
            </xsl:when>
            <xsl:when test="$type = 'w'">
                <tr>
                    <td style="background-color:#F8F781">
                        <xsl:value-of select="." />
                    </td>
                </tr>
            </xsl:when>
            <xsl:otherwise>
                <tr>
                    <td style="background-color:#E4E4E4">
                        <xsl:value-of select="." />
                    </td>
                </tr>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

    <xsl:template match="hrow">
        <tr>
            <td style="background-color:#DBC5FF;font-size: 16px;">
                <xsl:value-of select="." />
                [
                <xsl:value-of select="@time" />
                ]
            </td>
        </tr>
    </xsl:template>

</xsl:stylesheet>

1 Ответ

2 голосов
/ 06 декабря 2010

С опубликованным XML-документом вместо

<xsl:template match="log">
        <xsl:apply-templates select="row" />
        <xsl:apply-templates select="hrow" />
</xsl:template>

просто сделай

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

, который обрабатывает все дочерние узлы элемента журнала в порядке документа.

Или, если у вас есть другие дочерние узлы, которые не показаны, но которые вы не хотите обрабатывать, используйте

<xsl:template match="log">
        <xsl:apply-templates select="row | hrow"/>
</xsl:template>

таким образом, выбранные элементы (то есть строки и строки) обрабатываются также в порядке документов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...