Копировать XML-документ со всеми элементами, кроме черного списка элементов - PullRequest
0 голосов
/ 21 марта 2011

У меня есть XML-документ, подобный следующему:

<root>
    <record>
        <element1>value1</element1>
        <element2>value2</element2>
        <element3>value3</element3>
        <element4>value4</element4>
        <element5>value5</element5>
        <repeatingelement1>value 1.1</repeatingelement1>
        <repeatingelement1>value 1.2</repeatingelement1>
        <repeatingelement1>value 1.3</repeatingelement1>
        <repeatingelement2>value 2.1</repeatingelement2>
        <repeatingelement2>value 2.2</repeatingelement2>
        <repeatingelement2>value 2.3</repeatingelement2>
    </record>
    <record>
        <element1>a</element1>
        <element2>b</element2>
        <element3>c</element3>
        <element4>d</element4>
        <element5>e</element5>
        <repeatingelement1>a 1.1</repeatingelement1>
        <repeatingelement1>a 1.2</repeatingelement1>
        <repeatingelement1>a 1.3</repeatingelement1>
        <repeatingelement2>b 2.1</repeatingelement2>
        <repeatingelement2>b 2.2</repeatingelement2>
        <repeatingelement2>b 2.3</repeatingelement2>
    </record>
    <record>
        <element1>value1</element1>
        <element2>value2</element2>
        <element3>value3</element3>
        <element4>value4</element4>
        <element5>value5</element5>
        <repeatingelement1>value 1.1</repeatingelement1>
        <repeatingelement1>value 1.2</repeatingelement1>
        <repeatingelement1>value 1.3</repeatingelement1>
        <repeatingelement2>value 2.1</repeatingelement2>
        <repeatingelement2>value 2.2</repeatingelement2>
        <repeatingelement2>value 2.3</repeatingelement2>
    </record>
</root>

Я хочу иметь возможность получить копию Xml без черного списка элементов, скажем, без element3 и repeatingelement2.

например. Вывод будет:

<root>
    <record>
        <element1>value1</element1>
        <element2>value2</element2>
        <element4>value4</element4>
        <element5>value5</element5>
        <repeatingelement1>value 1.1</repeatingelement1>
        <repeatingelement1>value 1.2</repeatingelement1>
        <repeatingelement1>value 1.3</repeatingelement1>
    </record>
    <record>
        <element1>a</element1>
        <element2>b</element2>
        <element4>d</element4>
        <element5>e</element5>
        <repeatingelement1>a 1.1</repeatingelement1>
        <repeatingelement1>a 1.2</repeatingelement1>
        <repeatingelement1>a 1.3</repeatingelement1>
    </record>
    <record>
        <element1>value1</element1>
        <element2>value2</element2>
        <element4>value4</element4>
        <element5>value5</element5>
        <repeatingelement1>value 1.1</repeatingelement1>
        <repeatingelement1>value 1.2</repeatingelement1>
        <repeatingelement1>value 1.3</repeatingelement1>
    </record>
</root>

У кого-нибудь есть Xsl для этой версии 1.0 в идеале? Единственный способ сделать это - написать XSLT для всех элементов и исключить XSL для элементов, которые мне не нужны.

1 Ответ

6 голосов
/ 21 марта 2011

Это на удивление легко; просто создайте таблицу стилей с шаблоном идентификации и переопределите его для элементов, которые вы хотите удалить, без вывода. Как это:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="element3|repeatingelement2" />

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