XSLT-копия с определенного узла с дополнительным префиксом - PullRequest
0 голосов
/ 08 октября 2019

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

Вот мой XML:

<?xml version="1.0" encoding="UTF-8"?>
    <EdiSupplierInvoiceImportEnvelope>
        <Image />
        <Attachments />
        <InvoiceData>
            <EdiSupplierInvoice xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                <InvoiceType>ORDERS_BASED</InvoiceType>
                <CompanyIdentifiers>
                    <EdiCompanyIdentifier>
                        <IdentifierType>OTHER</IdentifierType>
                        <IdentifierValue>BDT</IdentifierValue>
                    </EdiCompanyIdentifier>
                </CompanyIdentifiers>
                <InvoiceNumber>123</InvoiceNumber>
                <InvoiceDate>2019-04-09</InvoiceDate>
                <CurrencyCode>DKK</CurrencyCode>
                <CurrencyRate>1</CurrencyRate>
                <Gross>5776.15</Gross>
                <Net>4620.92</Net>
                <Tax>1155.23</Tax>
                <Rounding>0</Rounding>
                <OrderIdentifier>PO0066197</OrderIdentifier>
                <SupplierIdentifiers>
                    <EdiSupplierIdentifier>
                        <IdentifierType>EAN_NUMBER</IdentifierType>
                        <IdentifierValue>EXT_14020136</IdentifierValue>
                    </EdiSupplierIdentifier>
                </SupplierIdentifiers>
                <Lines>
                    <EdiSupplierInvoiceLine>
                        <ItemNumber>273330</ItemNumber>
                        <ItemDescription>
                        </ItemDescription>
                        <Amount>3670.92</Amount>
                        <Quantity>11</Quantity>
                        <UnitPrice>333.72</UnitPrice>
                        <Unit>Krt</Unit>
                    </EdiSupplierInvoiceLine>
                    <EdiSupplierInvoiceLine>
                        <ItemNumber>111563</ItemNumber>
                        <ItemDescription>
                        </ItemDescription>
                        <Amount>950.00</Amount>
                        <Quantity>10</Quantity>
                        <UnitPrice>95.00</UnitPrice>
                        <Unit>krt</Unit>
                    </EdiSupplierInvoiceLine>
                    <EdiSupplierInvoiceLine>
                        <ItemNumber>113454</ItemNumber>
                        <ItemDescription>
                        </ItemDescription>
                        <Amount>0.00</Amount>
                        <Quantity>0</Quantity>
                        <UnitPrice>244.20</UnitPrice>
                        <Unit>krt</Unit>
                    </EdiSupplierInvoiceLine>
                </Lines>
                <CodingLines>
                    <EdiCodingLine>
                        <LineNumber>1</LineNumber>
                        <Dimensions />
                    </EdiCodingLine>
                    <EdiCodingLine>
                        <LineNumber>2</LineNumber>
                        <Dimensions />
                    </EdiCodingLine>
                    <EdiCodingLine>
                        <LineNumber>3</LineNumber>
                        <Dimensions />
                    </EdiCodingLine>
                </CodingLines>
                <PaymentDetails xsi:nil="true" />
                <CustomField_Numeric1 xsi:nil="true" />
                <CustomField_Numeric2 xsi:nil="true" />
                <CustomField_Numeric3 xsi:nil="true" />
                <CustomField_Numeric4 xsi:nil="true" />
                <CustomField_Numeric5 xsi:nil="true" />
                <CustomField_Text1 xsi:nil="true" />
                <CustomField_Text2 xsi:nil="true" />
                <CustomField_Text3 xsi:nil="true" />
                <CustomField_Text4 xsi:nil="true" />
                <CustomField_Text5 xsi:nil="true" />
                <DocumentSource>ManualCreation</DocumentSource>
                <CaptureUser xsi:nil="true" />
            </EdiSupplierInvoice>
        </InvoiceData>
    </EdiSupplierInvoiceImportEnvelope>

Вот XSLT:

    <?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://schemas.datacontract.org/2004/07/Medius.PurchaseToPay.Integrations.DocumentImport">
    <xsl:output indent="yes" />
    <xsl:template match="*" >
        <xsl:element name="di:{name()}" namespace="http://schemas.datacontract.org/2004/07/Medius.PurchaseToPay.Integrations.DocumentImport">
            <xsl:copy-of select="namespace::EdiSupplierInvoice" />
            <xsl:apply-templates />
        </xsl:element>
    </xsl:template>
    <xsl:template match="EdiSupplierInvoiceImportEnvelope/InvoiceData">
        <xsl:copy>
            <xsl:apply-templates />
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

Ожидаемые результаты:

<di:EdiSupplierInvoice xmlns:di="http://schemas.datacontract.org/2004/07/Medius.PurchaseToPay.Integrations.DocumentImport">
            <di:InvoiceType>ORDERS_BASED</di:InvoiceType>
            <di:CompanyIdentifiers>
                <di:EdiCompanyIdentifier>
                    <di:IdentifierType>OTHER</di:IdentifierType>
                    <di:IdentifierValue>BDT</di:IdentifierValue>
                </di:EdiCompanyIdentifier>
            </di:CompanyIdentifiers>
            <di:InvoiceNumber>123</di:InvoiceNumber>
            <di:InvoiceDate>2019-04-09</di:InvoiceDate>
            <di:CurrencyCode>DKK</di:CurrencyCode>
            <di:CurrencyRate>1</di:CurrencyRate>
            <di:Gross>5776.15</di:Gross>
            <di:Net>4620.92</di:Net>
            <di:Tax>1155.23</di:Tax>
            <di:Rounding>0</di:Rounding>
            <di:OrderIdentifier>PO0066197</di:OrderIdentifier>
            <di:SupplierIdentifiers>
                <di:EdiSupplierIdentifier>
                    <di:IdentifierType>EAN_NUMBER</di:IdentifierType>
                    <di:IdentifierValue>EXT_14020136</di:IdentifierValue>
                </di:EdiSupplierIdentifier>
            </di:SupplierIdentifiers>
            <di:Lines>
                <di:EdiSupplierInvoiceLine>
                    <di:ItemNumber>273330</di:ItemNumber>
                    <di:ItemDescription>
                    </di:ItemDescription>
                    <di:Amount>3670.92</di:Amount>
                    <di:Quantity>11</di:Quantity>
                    <di:UnitPrice>333.72</di:UnitPrice>
                    <di:Unit>Krt</di:Unit>
                </di:EdiSupplierInvoiceLine>
                <di:EdiSupplierInvoiceLine>
                    <di:ItemNumber>111563</di:ItemNumber>
                    <di:ItemDescription>
                    </di:ItemDescription>
                    <di:Amount>950.00</di:Amount>
                    <di:Quantity>10</di:Quantity>
                    <di:UnitPrice>95.00</di:UnitPrice>
                    <di:Unit>krt</di:Unit>
                </di:EdiSupplierInvoiceLine>
                <di:EdiSupplierInvoiceLine>
                    <di:ItemNumber>113454</di:ItemNumber>
                    <di:ItemDescription>
                    </di:ItemDescription>
                    <di:Amount>0.00</di:Amount>
                    <di:Quantity>0</di:Quantity>
                    <di:UnitPrice>244.20</di:UnitPrice>
                    <di:Unit>krt</di:Unit>
                </di:EdiSupplierInvoiceLine>
            </di:Lines>
            <di:CodingLines>
                <di:EdiCodingLine>
                    <di:LineNumber>1</di:LineNumber>
                    <di:Dimensions />
                </di:EdiCodingLine>
                <di:EdiCodingLine>
                    <di:LineNumber>2</di:LineNumber>
                    <di:Dimensions />
                </di:EdiCodingLine>
                <di:EdiCodingLine>
                    <di:LineNumber>3</di:LineNumber>
                    <di:Dimensions />
                </di:EdiCodingLine>
            </di:CodingLines>
            <di:PaymentDetails />
            <di:CustomField_Numeric1 />
            <di:CustomField_Numeric2 />
            <di:CustomField_Numeric3 />
            <di:CustomField_Numeric4 />
            <di:CustomField_Numeric5 />
            <di:CustomField_Text1 />
            <di:CustomField_Text2 />
            <di:CustomField_Text3 />
            <di:CustomField_Text4 />
            <di:CustomField_Text5 />
            <di:DocumentSource>ManualCreation</di:DocumentSource>
            <di:CaptureUser />
        </di:EdiSupplierInvoice>

Второйшаблон не соответствует дочерним узлам EdiSupplierInvoiceImportEnvelope / InvoiceData. Он всегда дает мне результаты со всеми узлами, а не так, как я хотел.

1 Ответ

0 голосов
/ 08 октября 2019

Ваш первый шаблон будет использоваться для соответствия корню EdiSupplierInvoiceImportEnvelope и всем его дочерним элементам, поэтому все они будут скопированы.

Если вы хотите пропустить родительские узлы и начать копирование с EdiSupplierInvoice, измените второй шаблон на этот ...

<xsl:template match="EdiSupplierInvoiceImportEnvelope">
    <xsl:apply-templates select="InvoiceData/EdiSupplierInvoice" />
</xsl:template>
...