1

私は XSLT が初めてです。JQuery プラグインでこれを使用するには、XSLTを使用して、以下の入力 xml 形式をその下にある目的の出力形式 (O/P 形式はHTML の unorderedList です)に変換する必要があります。以下の XSLT コードを自分で試してみましたが、さらに追加する必要があります。この変換を完了するのに苦労しています。誰か助けてください。

入力フォーマット

<Unit id = "2000001">
    <Unit id = "2000002">
        <Unit id = "2000006">
            <Unit id = "2000032">
                <Data>
                    <PartyId>2000032</PartyId>
                    <PartyTypeCode>DEPT</PartyTypeCode>
                    <PartyName>2017964 SM Retirement Party</PartyName>
                </Data>
            </Unit>
            <Unit id = "2000033">
                <Data>
                    <PartyId>2000033</PartyId>
                    <PartyTypeCode>DEPT</PartyTypeCode>
                    <PartyName>2018370 2012 Director's Ornament</PartyName>
                </Data>
            </Unit>
            <Data>
                <PartyId>2000006</PartyId>
                <PartyTypeCode>DEPT</PartyTypeCode>
                <PartyName>Projects Executive</PartyName>
            </Data>
        </Unit>
        <Data>
            <PartyId>2000002</PartyId>
            <PartyTypeCode>SEG</PartyTypeCode>
            <PartyName>Tres Aguilas Management</PartyName>
        </Data>
    </Unit>
    <Data>
        <PartyId>2000001</PartyId>
        <PartyTypeCode>SEG</PartyTypeCode>
        <PartyName>Tres Aguilas Enterprise</PartyName>
    </Data>
</Unit>

出力フォーマット:

<ul>
    <li id = "2000001">
        <span>Tres Aguilas Enterprise</span>
        <ul>
            <li id = "2000002">
                <span>Tres Aguilas Management</span>
                <ul>
                    <li id = "2000006">
                        <span>Projects Executive</span>
                        <ul>
                            <li id = "2000032">
                                <span>2017964 SM Retirement Party</span>                                
                            </li>
                            <li id = "2000033">
                                <span>2018370 2012 Director's Ornament</span>                               
                            </li>
                        </ul>
                    </li>
                </ul>
            </li>
        </ul>
    </li>
</ul>

XSLT コード:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">

      <xsl:for-each select="//Unit">
      <ul>
          <li><xsl:value-of select="Data/PartyName"/></li>
      </ul>
      </xsl:for-each>

</xsl:template>
</xsl:stylesheet>
4

2 に答える 2

0

これは、あなたが望むものを実現する「プッシュスタイル」のスタイルシートです。

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

    <!--identity template-->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <!--convert every <Unit> into a <UL>, 
        then "push" the attributes(i.e. @id), 
        and then "push" any <Unit> children-->
    <xsl:template match="Unit">
        <ul>
            <xsl:apply-templates select="@*"/>
        </ul>
    </xsl:template>

    <!--Create an <li> and copy the @id attribute,
        then "push" the Data/PartyName that are children of this <Unit>-->
    <xsl:template match="Unit/@id">
        <li>
            <xsl:copy/>
            <xsl:apply-templates select="../Data/PartyName"/>
            <xsl:apply-templates select="../Unit"/>
        </li>
    </xsl:template>

    <!--convert <PartyName> into <span> -->
    <xsl:template match="Data/PartyName">
        <span><xsl:value-of select="."/></span>
    </xsl:template>

</xsl:stylesheet>
于 2013-05-13T13:45:34.880 に答える
0

:) 私の質問に貢献してくれた Mads Hansen に感謝します。私は最終的にあなたが与えたXSLTに変更を加え、必要なフォーマットへの変換を達成することに成功しました. 最終的な XSLT は次のとおりです。

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

    <!--identity template-->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <!--convert every <Unit> into a <UL>, 
        then "push" the attributes(i.e. @id), 
        and then "push" any <Unit> children-->
    <xsl:template match="Unit">

        <xsl:apply-templates select="@*"/>

    </xsl:template>

    <!--Create an <li> and copy the @id attribute,
        then "push" the Data/PartyName that are children of this <Unit>-->
    <xsl:template match="Unit/@id">

        <li>
            <xsl:copy/>
            <xsl:apply-templates select="../Data/PartyName"/>
            <xsl:if test= "../Unit">
                <ul>
                    <xsl:apply-templates select="../Unit"/>
                </ul>
            </xsl:if>
        </li>

    </xsl:template>

    <!--convert <PartyName> into <span> -->
    <xsl:template match="Data/PartyName">
        <span>
            <xsl:value-of select="."/>
        </span>
    </xsl:template>

</xsl:stylesheet>
于 2013-05-16T09:29:28.227 に答える