0

次の XML があります。

<?xml version="1.0" encoding="utf-8"?>
<Rowsets>
    <Rowset>
        <Columns>
            <Column Description="DrilldownDepth" MaxRange="1" MinRange="0" Name="DrilldownDepth" SQLDataType="4" SourceColumn="DrilldownDepth"/>
            <Column Description="ABC" MaxRange="1" MinRange="0" Name="ABC" SQLDataType="4" SourceColumn="ABC"/>
            <Column Description="DEF" MaxRange="1" MinRange="0" Name="DEF" SQLDataType="-1" SourceColumn="DEF"/>
            <Column Description="PQR" MaxRange="1" MinRange="0" Name="PQR" SQLDataType="-1" SourceColumn="PQR"/>
        </Columns>
        <Row>
            <DrilldownDepth>1</DrilldownDepth>
            <ABC>25</ABC>
            <DEF>DDD</DEF>
            <PQR>PPP</PQR>
        </Row>
        <Row>
            <DrilldownDepth>1</DrilldownDepth>
            <ABC>16</ABC>
            <DEF>AAA</DEF>
            <PQR>BBB</PQR>
        </Row>
        <Row>
            <DrilldownDepth>1</DrilldownDepth>
            <ABC>19</ABC>
            <DEF>SEE</DEF>
            <PQR>HELP</PQR>
        </Row>
    </Rowset>
</Rowsets>

ここで、すべての行を追加する必要があります。したがって、私の XML は次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<Rowsets>
    <Rowset>
        <Columns>
            <Column Description="DrilldownDepth" MaxRange="1" MinRange="0" Name="DrilldownDepth" SQLDataType="4" SourceColumn="DrilldownDepth"/>
            <Column Description="ABC" MaxRange="1" MinRange="0" Name="ABC" SQLDataType="4" SourceColumn="ABC"/>
            <Column Description="DEF" MaxRange="1" MinRange="0" Name="DEF" SQLDataType="-1" SourceColumn="DEF"/>
            <Column Description="PQR" MaxRange="1" MinRange="0" Name="PQR" SQLDataType="-1" SourceColumn="PQR"/>
        </Columns>
        <Row>
            <DrilldownDepth>1</DrilldownDepth>
            <ABC>25</ABC>
            <DEF>DDD</DEF>
            <PQR>PPP</PQR>
            <XYZ></XYZ>
        </Row>
        <Row>
            <DrilldownDepth>1</DrilldownDepth>
            <ABC>16</ABC>
            <DEF>AAA</DEF>
            <PQR>BBB</PQR>
            <XYZ></XYZ>
        </Row>
        <Row>
            <DrilldownDepth>1</DrilldownDepth>
            <ABC>19</ABC>
            <DEF>SEE</DEF>
            <PQR>HELP</PQR>
            <XYZ></XYZ>
        </Row>
    </Rowset>
</Rowsets>

変換/XSLTを使用してこれを達成するにはどうすればよいですか?

さまざまな XSLT を試しましたが、どういうわけか達成できません。

ソハム

4

1 に答える 1

1

この単純な XSLT:

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

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

  <!-- Template #2 -->
  <xsl:template match="Row">
    <xsl:copy>
      <xsl:apply-templates />
      <XYZ></XYZ>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

...元の XML に適用すると:

<?xml version="1.0" encoding="UTF-8"?>
<Rowsets>
  <Rowset>
    <Columns>
      <Column Description="DrilldownDepth" MaxRange="1" MinRange="0" Name="DrilldownDepth" SQLDataType="4" SourceColumn="DrilldownDepth"/>
      <Column Description="ABC" MaxRange="1" MinRange="0" Name="ABC" SQLDataType="4" SourceColumn="ABC"/>
      <Column Description="DEF" MaxRange="1" MinRange="0" Name="DEF" SQLDataType="-1" SourceColumn="DEF"/>
      <Column Description="PQR" MaxRange="1" MinRange="0" Name="PQR" SQLDataType="-1" SourceColumn="PQR"/>
    </Columns>
    <Row>
      <DrilldownDepth>1</DrilldownDepth>
      <ABC>25</ABC>
      <DEF>DDD</DEF>
      <PQR>PPP</PQR>
    </Row>
    <Row>
      <DrilldownDepth>1</DrilldownDepth>
      <ABC>16</ABC>
      <DEF>AAA</DEF>
      <PQR>BBB</PQR>
    </Row>
    <Row>
      <DrilldownDepth>1</DrilldownDepth>
      <ABC>19</ABC>
      <DEF>SEE</DEF>
      <PQR>HELP</PQR>
    </Row>
  </Rowset>
</Rowsets>

...望ましい結果が得られます。

<?xml version="1.0" encoding="UTF-8"?><Rowsets>
  <Rowset>
    <Columns>
      <Column Description="DrilldownDepth" MaxRange="1" MinRange="0" Name="DrilldownDepth" SQLDataType="4" SourceColumn="DrilldownDepth"/>
      <Column Description="ABC" MaxRange="1" MinRange="0" Name="ABC" SQLDataType="4" SourceColumn="ABC"/>
      <Column Description="DEF" MaxRange="1" MinRange="0" Name="DEF" SQLDataType="-1" SourceColumn="DEF"/>
      <Column Description="PQR" MaxRange="1" MinRange="0" Name="PQR" SQLDataType="-1" SourceColumn="PQR"/>
    </Columns>
    <Row>
      <DrilldownDepth>1</DrilldownDepth>
      <ABC>25</ABC>
      <DEF>DDD</DEF>
      <PQR>PPP</PQR>
      <XYZ/>
    </Row>
    <Row>
      <DrilldownDepth>1</DrilldownDepth>
      <ABC>16</ABC>
      <DEF>AAA</DEF>
      <PQR>BBB</PQR>
      <XYZ/>
    </Row>
    <Row>
      <DrilldownDepth>1</DrilldownDepth>
      <ABC>19</ABC>
      <DEF>SEE</DEF>
      <PQR>HELP</PQR>
      <XYZ/>
    </Row>
  </Rowset>
</Rowsets>

説明:

  • テンプレート #1 は ID テンプレートです。すべてのノード/属性をそのままコピーします (後続のテンプレートによってオーバーライドされない限り)。
  • テンプレート #2 はすべての<row>要素をコピーし、(アイデンティティ テンプレートを介して) その子を処理し、必要な<XYZ>ノードを追加します。
于 2012-07-03T00:23:47.070 に答える