XSLT-копия, как я могу пропустить дочерний узел при копировании через XSL: copy-of - PullRequest
4 голосов
/ 11 февраля 2011

Вопрос для копирования вход:

<Rel>
    <IRel UID1="3a4d1d2909d0" UID2="35fe61082294" DefUID="AssetSupplier" />
    <IObject UID="3a4d1d2909d0.AssetSupplier.35fe61082294" />
    <SPXSupplier>
        <ISPFOrganization  />
        <ISPFAdminItem />
        <IObject UID="b73ebb87-cd36-4c25-b9ed-35fe61082294"
                 Description="local supplier made in form (10C)"
                 Name="CASTROL1200" />
        <ISupplierOrganization />
    </SPXSupplier>
</Rel>

Выход: Я только хочу пропустить SPXSupplier и его дочерний узел в моем выводе

<Rel>
    <IRel UID1="3a4d1d2909d0" UID2="35fe61082294" DefUID="AssetSupplier" />
    <IObject UID="3a4d1d2909d0.AssetSupplier.35fe61082294" />
</Rel>

В настоящее время я использую эту копию, которая копирует все вещи, включая ребенка, <xsl:copy-of select="self::node()"/>

Мне нужны только теги <Rel>, <IRel> и <IObject>. исключая другие вещи.

Ответы [ 2 ]

6 голосов
/ 11 февраля 2011

Вот уточнение ответа Алекса.

<xsl:template match="SPXSupplier"/>

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

Пустой шаблон для SPXSupplier означает, что при нажатии на один из этих элементов поддерево под этим элементом не обрабатывается. Я также использовал версию шаблона идентификации, которая безоговорочно копирует атрибуты, что более эффективно.

2 голосов
/ 11 февраля 2011

xsl:copy-of копирует весь поддерево.Чтобы исключить элемент SPXSupplier, вы можете использовать следующий подход:

<xsl:template match="//Rel">
    <xsl:copy>
        <xsl:apply-templates select="@*|IRel|IObject"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...