1

XSLT を使用してクリーンアップしたい不要なデータや不要なデータが多数含まれる XML ファイルがあります。

以下は、空のノードの例を含むデータの小さなスニペットです。

<?xml version="1.0" encoding="utf-8"?>
<Report xsi:schemaLocation="xxx">
    <Tablix3>
        <Tablix13 Textbox1164="TAX SUMMARY" Textbox10="">
            <table26 textbox155="code">
                <Detail_Collection>
                    <Detail textbox198="" TaxText2="" textbox112="0" textbox114="0" textbox200="0" textbox202="0" textbox874="0" />
                    <Detail textbox198="" TaxText2="" textbox112="0" textbox114="0" textbox200="0" textbox202="0" textbox874="0" />
                    <Detail textbox198="" TaxText2="" textbox112="0" textbox114="0" textbox200="0" textbox202="0" textbox874="0" />
                    <Detail textbox198="" TaxText2="" textbox112="0" textbox114="0" textbox200="0" textbox202="0" textbox874="0" />
                    <Detail textbox198="" TaxText2="" textbox112="0" textbox114="0" textbox200="0" textbox202="0" textbox874="0" />
                    <Detail textbox198="" TaxText2="" textbox112="0" textbox114="0" textbox200="0" textbox202="0" textbox874="0" />
                    <Detail textbox198="" TaxText2="" textbox112="0" textbox114="0" textbox200="0" textbox202="0" textbox874="0" />
                    <Detail textbox198="" TaxText2="" textbox112="0" textbox114="0" textbox200="0" textbox202="0" textbox874="0" />
                    <Detail textbox198="" TaxText2="" textbox112="0" textbox114="0" textbox200="0" textbox202="0" textbox874="0" />
                </Detail_Collection>
            </table26>
            <Tablix26>
                <table24>
                    <Detail_Collection>
                        <Detail textbox208="" textbox209="" textbox210="0" />
                        <Detail textbox208="" textbox209="" textbox210="0" />
                        <Detail textbox208="" textbox209="" textbox210="0" />
                        <Detail textbox208="" textbox209="" textbox210="0" />
                        <Detail textbox208="" textbox209="" textbox210="0" />
                        <Detail textbox208="" textbox209="" textbox210="0" />
                        <Detail textbox208="" textbox209="" textbox210="0" />
                        <Detail textbox208="" textbox209="" textbox210="0" />
                        <Detail textbox208="" textbox209="" textbox210="0" />
                        <Detail textbox208="" textbox209="" textbox210="0" />
                    </Detail_Collection>
                </table24>
            </Tablix26>
        </Tablix13>
    </Tablix3>
</Report>

たとえば、すべての空の (属性に値がないか、値が 0 の) 詳細ノードを削除し、すべての詳細行が空の場合にのみ、詳細コレクション ノードも削除したいと考えています。

必要な属性データが時々あるので、テーブルをそのままにしておきたいと思います。

Xpath を使用してみましたが、知識が限られているため問題がありました。

誰かが私を正しい方向に向けることができますか?

ありがとう

4

1 に答える 1

5

XSLT では、変更を加えずにコピーする ID テンプレートから始めます。

<xsl:template match="*">
  <xsl:copy>
    <xsl:copy-of select="@*"/>
    <xsl:apply-templates/>
  </xsl:copy>
</xsl:template>

次に、削除するノードに空のテンプレート ルールを追加します。

「たとえばすべての詳細ノードを削除したい」

それは

<xsl:template match="Detail"/>

あなたの修正された質問で:

Detail textbox198="" など、属性が空または 0 の場合、すべての詳細行を削除したい

それはなる

<xsl:template match="Detail[@*[not(. = '' or . = 0)]]"/>

すべての詳細行が空の場合にのみ、詳細コレクション ノードも削除します。

「空」の同じ定義で、それは

<xsl:template match="Detail_Collection[not(Detail[@*[not(. = '' or . = 0)]])]"/>
于 2013-10-28T17:11:12.703 に答える