1

我有一个 XML 文件,其中包含许多我想使用 XSLT 清理的不需要/不需要的数据

这是带有示例空节点的一小段数据

<?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 中,从一个不改变复制内容的标识模板开始:

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

然后为要删除的节点添加空模板规则。

“例如,我想删除所有详细节点”

那将是

<xsl:template match="Detail"/>

在您修改后的问题中:

如果属性为空或 0,我想删除所有详细信息行,例如,如果 Detail textbox198=""

那变成

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

“并且只有在所有明细行都为空的情况下,还要删除明细集合节点。”

使用相同的“空”定义,那将是

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