0

私はそのようなことをする必要があります

これは私のxmlです:

<TSRslt>
<TSExpectedResult Expected = "result : 42.7400131226"></TSExpectedResult>
<TSActual Actual = "result :  42.7400131226" Result = "0"></TSActual>
</TSRslt>
<TSRslt>
<TSExpectedResult Expected = "result :xyz"></TSExpectedResult>
<TSActual Actual = "result :  xyz" Result = "1"></TSActual>
</TSRslt>

これは私のスタイルシートxslです:

<TABLE id="table2" class="tl2" cellSpacing="0" cellPadding="2" width="100%">
        <TR><TH noWrap = "noWrap" class="br">Expected</TH>
            <TH noWrap = "noWrap" class="br">Actual</TH>
        </TR>
        <TR>

                <xsl:for-each select="TSRslt">
                    <TR><TD class="br2" width="50%"><xsl:for-each select="TSExpectedResult"><xsl:value-of select="@Expected" /></xsl:for-each></TD>
                    <TD class="br2" width="50%"><xsl:for-each select="TSActual">
                    <xsl:if test="@Result = '0'">
                        <FONT COLOR = "#000000">
                            <xsl:value-of select="@Actual" />
                        </FONT>
                    </xsl:if>
                    <xsl:if test="@Result = '1'">
                        <FONT COLOR = "#000000">
                            <xsl:value-of select="@Actual" />
                        </FONT>
                    </xsl:if>
                    </xsl:for-each></TD>
                    </TR>
                </xsl:for-each>



        </TR>
    </TABLE>

しかし、私のxmlはそうではありません。タグの順序は次のようになります。

<TSExpectedResult Expected = "result : -32.60900"></TSExpectedResult>
<TSExpectedResult Expected = "result : -32.60900"></TSExpectedResult>
<TSActual Actual = "result :  -32.60900" Result = "0"></TSActual>
<TSActual Actual = "result :  -32.60900" Result = "0"></TSActual> 

xml ファイルが多すぎるため、すべてのタグの順序を変更できません。この注文でテーブルを埋めるにはどうすればよいですか:

 Expected Results     Actual REsults
  1                    4
  2                    5
  3                    6
4

1 に答える 1

0

TSExpectedResult エントリと同じ位置で TSActual エントリにアクセスしたいようです。

そのため、TSExpectedResult に対して for-each ループを実行し、TSActual エントリにアクセスし
て現在の位置を変数に入れます。

<xsl:variable name="pos" select="position()" />

これを使用して、TSActual エントリにアクセスします。

 select="../TSActual[position() = $pos]" 

また、次の例では、不要な loos を削除し、applay テンプレートを使用しています。

次のようなことを試してください:

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

    <xsl:template match ="TSActual" mode="td">
        <FONT COLOR = "#xxxx">
            <xsl:attribute name="COLOR" >
                <xsl:if test="@Result = '0'">#000001</xsl:if>
                <xsl:if test="@Result = '1'">#000002</xsl:if>
            </xsl:attribute>
            <xsl:value-of select="@Actual" />
        </FONT>
    </xsl:template>

    <xsl:template match="/*">
        <TABLE id="table2" class="tl2" cellSpacing="0" cellPadding="2" width="100%">
            <TR>
                <TH noWrap = "noWrap" class="br">Expected</TH>
                <TH noWrap = "noWrap" class="br">Actual</TH>
            </TR>
            <TR>
                <xsl:for-each select="TSExpectedResult">
                    <xsl:variable name="pos" select="position()" />
                    <TR>
                        <TD class="br2" width="50%">
                                <xsl:value-of select="@Expected" />
                        </TD>
                        <TD class="br2" width="50%">
                            <xsl:apply-templates select="../TSActual[position() = $pos]" mode="td" />
                        </TD>
                    </TR>
                </xsl:for-each>
            </TR>
        </TABLE>
    </xsl:template>

</xsl:stylesheet>
于 2013-06-20T15:11:52.970 に答える