0

これは私のxmlファイルです:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="try.xsl"?>
<oneday>
    <team1 id="1" team="India">
        <team2 id="2" team="gujarat">
            <team3 id="3" team="guj11"></team3>
        </team2>
    </team1>
</oneday>

これは私のxslファイルです:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
<xsl:output method="text" />

<xsl:template match="*">
        <xsl:value-of select="local-name()"/>

        <xsl:apply-templates/>
    </xsl:template>

    <xsl:template match="text()[normalize-space(.)]">
        <xsl:value-of select="concat(':', .)"/>
    </xsl:template>
</xsl:stylesheet>

これは私の出力です:

oneday
    team1
        team2
            team3

しかし、私はこのようなものを出力したい:

oneday
    team1:India
        team2:Gujarat
            team3:Guj11
4

1 に答える 1

0

これはどうですか:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text" />

  <xsl:template match="*">
    <xsl:apply-templates select="ancestor::*" mode="spacing" />

    <xsl:value-of select="local-name()"/>
    <xsl:if test="@team">
      <xsl:value-of select="concat(':', @team)"/>
    </xsl:if>
    <xsl:text>&#xA;</xsl:text>

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

  <xsl:template match="*" mode="spacing">
    <xsl:text>    </xsl:text>
  </xsl:template>
</xsl:stylesheet>

サンプル XML で実行すると、次のようになります。

oneday
    team1:India
        team2:gujarat
            team3:guj11

もう少し複雑な XML で実行すると、次のようになります。

<oneday>
  <team1 id="1" team="India">
    <team2 id="2" team="gujarat">
      <team3 id="3" team="guj11"></team3>
    </team2>
    <team6 team="Mumbai" />
  </team1>
  <team4 team="France">
    <team5 team="Paris" />
  </team4>
</oneday>

以下を生成します。

oneday
    team1:India
        team2:gujarat
            team3:guj11
        team6:Mumbai
    team4:France
        team5:Paris
于 2013-01-28T13:25:17.583 に答える