XSLT-копия без атрибутов - PullRequest
       4

XSLT-копия без атрибутов

0 голосов
/ 11 марта 2020

У меня есть XSLT, который переводит с XML A на XML B, и 2 на 95% одинаковы, за исключением того факта, что XML B имеет меньше атрибутов. Так, например, мне нужно перевести:

 <PaymentDetail PaymentType="CC" ItemNbr="6" CcardNbr="9999999999999999" CcardExp="0523" CcardVend="AA" PayRmrk="" Description="Advance Payment" Total="999.99" />

в

 <PaymentDetail PaymentType="CC" ItemNbr="6" CcardNbr="9999999999999999" CcardExp="0523" CcardVend="AA"  Total="999.99" />

Я пробовал копировать со списком атрибутов, но, похоже, слишком многословно, как просто делая element = PaymentDetail, имя атрибута = ..... и, в основном, "жестко кодирующий" все это.

Я использую версию 1

Ответы [ 2 ]

0 голосов
/ 11 марта 2020

Стандартное решение использует шаблонные правила:

    <!-- Default template: copy nodes unchanged -->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <!-- Drop selected attributes -->
    <xsl:template match="@PayRmrk | @Description"/>
0 голосов
/ 11 марта 2020

Вы можете исключить атрибуты, которые вам не нужны, в вашем выражении Xpath:

    <xsl:template match="PaymentDetail">
        <xsl:copy>
            <xsl:copy-of select="@* except (@PayRmrk, @Description)"/>
        </xsl:copy>
    </xsl:template>

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

Посмотрите, как это работает здесь: http://xsltfiddle.liberty-development.net/6pS26mv

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...