C# 将 Saxon XSLT 转换结果显示到当前 ASP.NET 容器页面

Posted

技术标签:

【中文标题】C# 将 Saxon XSLT 转换结果显示到当前 ASP.NET 容器页面【英文标题】:C# Display Saxon XSLT transformation result to current ASP.NET container page 【发布时间】:2017-01-05 17:05:59 【问题描述】:

我有一个 XML 和一个 XSLT v2.0 转换应用到它。 我需要将生成的 html(本质上是发送建议文档的表结构)输出到容器页面。 容器页面是一个 ASP.NET 页面,其中包含一些控件和一个 Tab 控件(来自 Telerik),我想用它来放置最终文档以供查看。

我的问题是转换返回从<html> 标记开始的完整 HTML 页面。 如何仅过滤我需要的内容?

在另一个类似的项目中,我使用了一个 ASP.NET Xml 服务器控件来应用转换 (XSLT v1.0) 并自动获取文档视图。这是代码:

XmlDocument xd;
using (MemoryStream ms = new MemoryStream(file))

    xd = new XmlDocument();
    xd.Load(ms);

XDocument InvoiceXDocument = new XDocument();
using (var nodeReader = new XmlNodeReader(xd))

    nodeReader.MoveToContent();
    InvoiceXDocument = XDocument.Load(nodeReader);


invoiceViewer.TransformSource = @"C:\path\to\transformation.xslt";
invoiceViewer.DocumentContent = InvoiceXDocument.ToString(); // XDocument object of the XML invoice

由于我的新 XSLT 是 XSLT v2.0,我不能再使用它了。所以我改用撒克逊人了。

这是我使用 Saxon 的实际转换代码:

Processor processor = new Processor();
XsltCompiler compiler = processor.NewXsltCompiler();
XsltExecutable executable;
executable = compiler.Compile(new Uri(xsltFilePath));

StringWriter output = new StringWriter();
Serializer serializer = new Serializer();
serializer.SetOutputWriter(output);

XsltTransformer transformer = executable.Load();
transformer.SetInputStream(input, new Uri("file:///XSLTValidURI"));
transformer.Run(serializer);

return output.ToString();

如何使用 Saxon 库获得相同的结果?

2016 年 8 月 30 日更新

XML 文件来自 Peppol European Business Document Service(请参阅 PEPPOL)

这是要转换的 XML(使用意大利 cmets)。

<?xml version="1.0" encoding="UTF-8"?>
<DespatchAdvice xmlns="urn:oasis:names:specification:ubl:schema:xsd:DespatchAdvice-2" 
    xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" 
    xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
    <cbc:UBLVersionID>2.1</cbc:UBLVersionID>
    <cbc:CustomizationID>urn:www.cenbii.eu:transaction:biitrns016:ver1.0:extended:urn:www.peppol.eu:bis:peppol30a:ver1.0:extended:urn:www.ubl-italia.org:spec:ddt:ver2.1</cbc:CustomizationID>
    <cbc:ProfileID>urn:www.cenbii.eu:profile:bii30:ver2.0</cbc:ProfileID>
    <!--Identificativo DDT. Obbligatorio-->
    <cbc:ID>DDT-2015-123</cbc:ID>
    <!--Data DDT. Obbligatorio-->
    <cbc:IssueDate>2015-10-29</cbc:IssueDate>
    <!--Orario DDT. Opzionale. Se usato inserire informazione-->
    <cbc:IssueTime>08:00:50</cbc:IssueTime>
    <!--Campo note in testata. Opzionale. Se usato inserire informazione-->
    <cbc:Note>Prova Note in Testata</cbc:Note>
    <!--Identificativo riferimento ad un singolo ordine. Opzionale. Se usato inserire informazione-->
    <cac:OrderReference>
        <cbc:ID>ORD-2015-321</cbc:ID>
        <cbc:IssueDate>2015-10-25</cbc:IssueDate>
        <!--Tipo ordine. Opzionale. Se usato inserire informazione-->
        <cbc:OrderTypeCode listID="UNCL1001">221</cbc:OrderTypeCode>
    </cac:OrderReference>
    <!--Speditore. Organizzazione che fornisce la merce o servizi. Obbligatorio-->
    <cac:DespatchSupplierParty>
        <cac:Party>
            <cac:PartyIdentification>
                <!--CF PI speditore. Obbligatorio-->
                <cbc:ID schemeID="IT:VAT">IT123456789</cbc:ID>
            </cac:PartyIdentification>
            <!--Azienda speditore. Obbligatorio-->
            <cac:PartyName>
                <cbc:Name>Notier</cbc:Name>
            </cac:PartyName>
            <!--Contatto persona di riferimento. Opzionale. Se usato inserire informazione-->
            <cac:Contact>
                <cbc:Name>Magazzino</cbc:Name>
                <cbc:Telephone>05155999</cbc:Telephone>
                <cbc:Telefax>05155999</cbc:Telefax>
                <cbc:ElectronicMail>CasellaPostaSpeditore@indirizzo.it</cbc:ElectronicMail>
            </cac:Contact>
        </cac:Party>
    </cac:DespatchSupplierParty>
    <!--Consegnatario. Organizzazione alla quale verranno spediti i prodotti. Obbligatorio-->
    <cac:DeliveryCustomerParty>
        <cac:Party>
            <!--Codice IPA consegnatario Ausl Cesena. Opzionale. Se usato inserire informazione-->
            <cbc:EndpointID schemeID="IT:IPA">9921:IT0L06J9</cbc:EndpointID>
            <cac:PartyIdentification>
                <!--CF PI consegnatario. Obbligatorio-->
                <cbc:ID schemeID="IT:VAT">123456789</cbc:ID>
            </cac:PartyIdentification>
            <cac:PartyName>
                <!--Azienda consegnatario. Obbligatorio-->
                <cbc:Name>Nome Azienda Consegnatario</cbc:Name>
            </cac:PartyName>
            <!--Indirizzo consegnatario. Opzionale. Se usato inserire informazione-->
            <cac:PostalAddress>
                <cbc:ID>AB01</cbc:ID>
                <cbc:StreetName>Via</cbc:StreetName>
                <cbc:AdditionalStreetName>Inforazioni aggiuntive all'indirizzo</cbc:AdditionalStreetName>
                <cbc:CityName>Bologna</cbc:CityName>
                <cbc:PostalZone>40100</cbc:PostalZone>
                <cbc:CountrySubentity>BO</cbc:CountrySubentity>
                <cac:Country>
                    <cbc:IdentificationCode listID="ISO3166-1:Alpha2">IT</cbc:IdentificationCode>
                </cac:Country>
            </cac:PostalAddress>
        </cac:Party>
        <!--Contatto persona di riferimento. Opzionale. Se usato inserire informazione-->
        <cac:DeliveryContact>
            <!--Informazioni persona di riferimento. Opzionale. Se usato inserire informazione-->
            <cbc:Name>Nome Persona o Magazzino</cbc:Name>
            <cbc:Telephone>05155999</cbc:Telephone>
            <cbc:Telefax>05155999</cbc:Telefax>
            <cbc:ElectronicMail>CasellaPostaConsegnatario@indirizzo.it</cbc:ElectronicMail>
        </cac:DeliveryContact>
    </cac:DeliveryCustomerParty>
    <!--Acquirente. Chi acquista la merce. Opzionale. Se usato inserire informazione-->
    <cac:BuyerCustomerParty>
        <cac:Party>
            <cac:PartyIdentification>
                <!--CF PI acquirente. Obbligatorio-->
                <cbc:ID schemeID="IT:CF">123456789</cbc:ID>
            </cac:PartyIdentification>
            <cac:PartyName>
                <!--Azienda acquirente. Obbligatorio-->
                <cbc:Name>Nome Acquirente</cbc:Name>
            </cac:PartyName>
        </cac:Party>
    </cac:BuyerCustomerParty>
    <!--Venditore. Chi vende la merce o i servizi. Opzionale. Se usato inserire informazione-->
    <cac:SellerSupplierParty>
        <cac:Party>
            <cac:PartyIdentification>
                <!--CF PI venditore. Obbligatorio-->
                <cbc:ID schemeID="IT:VAT">IT123456789</cbc:ID>
            </cac:PartyIdentification>
            <cac:PartyName>
                <!--Azienda venditore. Obbligatorio-->
                <cbc:Name>Nome o Descrizione del Magazzino, Venditore</cbc:Name>
            </cac:PartyName>
            <!--Contatto persona di riferimento. Opzionale. Se usato inserire informazione-->
            <cac:Contact>
                <!--Infomrazioni Persona di Riferimento. Opzionale. Se usato inserire informazione-->
                <cbc:Name>Nome Persona o Magazzino di Riferimento se Presente</cbc:Name>
                <cbc:Telephone>05155999</cbc:Telephone>
                <cbc:Telefax>05155999</cbc:Telefax>
                <cbc:ElectronicMail>CasellaPostaVenditore@indirizzo.it</cbc:ElectronicMail>
            </cac:Contact>
        </cac:Party>
    </cac:SellerSupplierParty>
    <!--Committente. Chi eventualmente riceve e consuma la merce. Opzionale. Se usato inserire informazione-->
    <cac:OriginatorCustomerParty>
        <cac:Party>
            <cac:PartyIdentification>
                <!--CF PI committente. Obbligatorio-->
                <cbc:ID schemeID="IT:CF">123456789</cbc:ID>
            </cac:PartyIdentification>
            <cac:PartyName>
                <!--Azienda committente. Obbligatorio-->
                <cbc:Name>Nome o Descrizione del Magazzino, Committente</cbc:Name>
            </cac:PartyName>
        </cac:Party>
    </cac:OriginatorCustomerParty>
    <!--Gestione spedizione della merce. Opzionale. Se usato inserire informazione-->
    <cac:Shipment>
        <!--Identificatore spedizione, se non presente ID usare 'NA'. Obbligatorio-->
        <cbc:ID>AB01</cbc:ID>
        <!--Informazioni gestione spedizione. Opzionale-->
        <cbc:Information>Inserire Descrizione Spedizione</cbc:Information>
        <cbc:GrossWeightMeasure unitCode="KGM">100</cbc:GrossWeightMeasure>
        <cbc:GrossVolumeMeasure unitCode="MTQ">15</cbc:GrossVolumeMeasure>
        <cbc:TotalTransportHandlingUnitQuantity>25</cbc:TotalTransportHandlingUnitQuantity>
        <!--Informazioni di trasporto sulla spedizione. Opzionale. Se usato inserire informazione-->
        <cac:Consignment>
            <cbc:ID>SPED100</cbc:ID>
            <!--Descrizione del veicolo. Opzionale. Se usato inserire informazione-->
            <cbc:Information>Veicolo ad esempio: AUTOCARRO</cbc:Information>
            <!--Vettore, se diverso da speditore inserirlo. Opzionale. Se usato inserire informazione-->
            <cac:CarrierParty>
                <cac:PartyName>
                    <!--Reagione sociale del vettore. Opzionale. Se usato inserire informazione-->
                    <cbc:Name>Vettore: ad esempio SDA</cbc:Name>
                </cac:PartyName>
                <!--Informazioni autista. Opzionale. Se usato inserire informazione-->
                <cac:Person>
                    <cac:IdentityDocumentReference>
                        <!--Informazioni documento Autista. Opzionale. Se usato inserire informazione-->
                        <cbc:ID>PAT123456</cbc:ID>
                        <cbc:DocumentType>PATENTE</cbc:DocumentType>
                    </cac:IdentityDocumentReference>
                </cac:Person>
            </cac:CarrierParty>
        </cac:Consignment>
        <!--Gestione Ccnsegna della merce. Opzionale. Se usato inserire informazione-->
        <cac:Delivery>
            <!--Informazioni sulla consegna della merce. Opzionale. Se usato inserire informazione-->
            <cbc:TrackingID>Merce10</cbc:TrackingID>
            <!--Periodo stimato sulla consegna della merce. Opzionale. Se usato inserire informazione-->
            <cac:EstimatedDeliveryPeriod>
                <cbc:StartDate>2015-10-30 </cbc:StartDate>
                <cbc:StartTime>08:30:50</cbc:StartTime>
                <cbc:EndDate>2015-10-31</cbc:EndDate>
                <cbc:EndTime>12:30:50</cbc:EndTime>
            </cac:EstimatedDeliveryPeriod>
            <!--Evasione  della spedizione. Opzionale. Se usato inserire informazione-->
            <cac:Despatch>
                <!--Periodo e ora evasione spedizione effettiva. Opzionale. Se usato inserire informazione-->
                <cbc:ActualDespatchDate>2015-10-31</cbc:ActualDespatchDate>
                <cbc:ActualDespatchTime>16:30:30</cbc:ActualDespatchTime>
                <!--Informazioni indirizzo evasione spedizione effettiva. Opzionale. Se usato inserire informazione-->
                <cac:DespatchAddress>
                    <cbc:ID>234</cbc:ID>
                    <cbc:StreetName>Inserire Indirizzo Principale</cbc:StreetName>
                    <cbc:AdditionalStreetName>Inserire Informazioni Aggiuntive all'Indirizzo</cbc:AdditionalStreetName>
                    <cbc:CityName>Bologna</cbc:CityName>
                    <cbc:PostalZone>40100</cbc:PostalZone>
                    <cbc:CountrySubentity>BO</cbc:CountrySubentity>
                    <cac:Country>
                        <cbc:IdentificationCode listID="ISO3166-1:Alpha2">IT</cbc:IdentificationCode>
                    </cac:Country>
                </cac:DespatchAddress>
            </cac:Despatch>
        </cac:Delivery>
    </cac:Shipment>
    <!--Tabella prodotti richiesti. Obbligatorio-->
    <cac:DespatchLine>
        <!--Identificatore di riga. Obbligatorio-->
        <cbc:ID>1</cbc:ID>
        <!--Note di riga. Opzionale. Se usato inserire informazione-->
        <cbc:Note>Inserire Note</cbc:Note>
        <!--Unità di misura e quantità consegnata. Obbligatorio-->
        <cbc:DeliveredQuantity unitCode="NAR" unitCodeListID="UNECERec20">100</cbc:DeliveredQuantity>
        <!--Quantità inevasa. Opzionale. Se usato inserire informazione-->
        <cbc:OutstandingQuantity unitCode="NAR" unitCodeListID="UNECERec20">20</cbc:OutstandingQuantity>
        <!--Ragione o motivo per la quantità inevasa. Opzionale. Se usato inserire informazione-->
        <cbc:OutstandingReason>Inserire Motivazione: Ad esempio Difettosa</cbc:OutstandingReason>
        <!--Riferimento a più ordini. Opzionale. Se usato inserire informazione-->
        <cac:OrderLineReference>
            <!--Riferimento linea d'ordine. Se non valorizzato utilizzare 'NA'. Obbligatorio-->
            <cbc:LineID>1</cbc:LineID>
            <cac:OrderReference>
                <!--Riferimento all'ordine. Obbligatorio-->
                <cbc:ID>ORD-2015-321</cbc:ID>
                <cbc:IssueDate>2015-10-25</cbc:IssueDate>
                <cbc:OrderTypeCode listID="UNCL1001">221</cbc:OrderTypeCode>
            </cac:OrderReference>
        </cac:OrderLineReference>
        <!--Riferimenti aggiuntivi dalle righe dell’avviso spedizione. Opzionale. Se usato inserire informazione-->
        <cac:DocumentReference>
            <!--Riferimento Linea d'Ordine. Obbligatorio-->
            <cbc:ID>45</cbc:ID>
            <cbc:IssueDate>2015-09-30</cbc:IssueDate>
            <cbc:DocumentType>CIG</cbc:DocumentType>
        </cac:DocumentReference>
        <!--Riferimenti articolo su riga. Opzionale. Se usato inserire informazione-->
        <cac:Item>
            <!--Descrizione prodotto. Opzionale, se usato inserire valori-->
            <cbc:Name>ABBA 12CPR RIV 875MG 125MG</cbc:Name>
            <cbc:AdditionalInformation>Principio Attivo:AMOXICILLINA TRIIDRATA/POTASSIO CLAVULANATO</cbc:AdditionalInformation>
            <cac:SellersItemIdentification>
                <!--Codice prodotto. Identificatore dell’articolo secondo il Venditore. Obbligatorio-->
                <cbc:ID>100123</cbc:ID>
            </cac:SellersItemIdentification>
            <cac:StandardItemIdentification>
                <!--Codice prodotto. Identificatore standard per l’articolo. Obbligatorio.-->
                <cbc:ID schemeID="GTIN" schemeAgencyID="9" schemeAgencyName="GS1">036816015</cbc:ID>
            </cac:StandardItemIdentification>
            <!--Istanza specifica dell’articolo. Opzionale, se usato inserire valori-->
            <cac:ItemInstance>
                <!--Informazioni specifici dell'articolo. Opzionale, se usato inserire valori-->
                <cbc:ManufactureDate>2006-06-23</cbc:ManufactureDate>
                <cbc:BestBeforeDate>2020-12-31</cbc:BestBeforeDate>
                <cbc:SerialID>ITA00258</cbc:SerialID>
                <!--Lotto della merce. Opzionale, se usato inserire valori-->
                <cac:LotIdentification>
                    <cbc:LotNumberID>111222333</cbc:LotNumberID>
                    <cbc:ExpiryDate>2017-12-31</cbc:ExpiryDate>
                </cac:LotIdentification>
            </cac:ItemInstance>
        </cac:Item>
        <!--Informazioni particolari sulla spedizione. Opzionale, se usato inserire valori-->
        <cac:Shipment>
            <!--Informazioni sulla spedizione. Se non valorizzato utilizzare 'NA'. Opzionale, se usato inserire valori-->
            <cbc:ID>NA</cbc:ID>
            <cbc:HandlingCode listID="UNCL4079">2</cbc:HandlingCode>
            <!--Unità logistica di trasporto. Opzionale, se usato inserire valori-->
            <cac:TransportHandlingUnit>
                <cbc:ID schemeID="SSCC" schemeAgencyName="GS1">54321</cbc:ID>
                <!--Opzionale, se usato inserire valori-->
                <cbc:TransportHandlingUnitTypeCode listID="UNECERec21">CT</cbc:TransportHandlingUnitTypeCode>
                <cbc:HazardousRiskIndicator>false</cbc:HazardousRiskIndicator>
                <cbc:ShippingMarks>FIDIA FARMACEUTICI SpA</cbc:ShippingMarks>
                <!--Unità di misura. Opzionale, se usato inserire valori-->
                <cac:MeasurementDimension>
                    <cbc:AttributeID schemeID="UNCL6313">AAB</cbc:AttributeID>
                    <cbc:Measure unitCode="KGM">50</cbc:Measure>
                </cac:MeasurementDimension> 
            </cac:TransportHandlingUnit>
        </cac:Shipment>
    </cac:DespatchLine>
    <cac:DespatchLine>
        <!--Identificatore di riga. Obbligatorio-->
        <cbc:ID>2</cbc:ID>
        <!--Note di riga. Opzionale. Se usato inserire informazione-->
        <cbc:Note>Inserire Note</cbc:Note>
        <!--Unità di misura e quantità consegnata. Obbligatorio-->
        <cbc:DeliveredQuantity unitCode="NAR" unitCodeListID="UNECERec20">5</cbc:DeliveredQuantity>
        <!--Riferimento a più ordini. Opzionale. Se usato inserire informazione-->
        <cac:OrderLineReference>
            <!--Riferimento linea d'ordine. Se non valorizzato utilizzare 'NA'. Obbligatorio-->
            <cbc:LineID>2</cbc:LineID>
            <cac:OrderReference>
                <!--Riferimento all'ordine. Obbligatorio-->
                <cbc:ID>ORD-2015-321</cbc:ID>
                <cbc:IssueDate>2015-10-25</cbc:IssueDate>
                <cbc:OrderTypeCode listID="UNCL1001">221</cbc:OrderTypeCode>
            </cac:OrderReference>
        </cac:OrderLineReference>
        <!--Riferimenti aggiuntivi dalle righe dell’avviso spedizione. Opzionale. Se usato inserire informazione-->
        <cac:DocumentReference>
            <!--Riferimento Linea d'Ordine. Obbligatorio-->
            <cbc:ID>45</cbc:ID>
            <cbc:IssueDate>2015-09-30</cbc:IssueDate>
            <cbc:DocumentType>CIG</cbc:DocumentType>
        </cac:DocumentReference>
        <!--Riferimenti articolo su riga. Opzionale. Se usato inserire informazione-->
        <cac:Item>
            <!--Descrizione prodotto. Opzionale, se usato inserire valori-->
            <cbc:Name>MYLERAN*100CPR RIV 2MG</cbc:Name>
            <cbc:AdditionalInformation>Principio Attivo:BUSULFANO</cbc:AdditionalInformation>
            <cac:SellersItemIdentification>
                <!--Codice prodotto. Identificatore dell’articolo secondo il Venditore. Obbligatorio-->
                <cbc:ID>3698233</cbc:ID>
            </cac:SellersItemIdentification>
            <cac:StandardItemIdentification>
                <!--Codice prodotto. Identificatore standard per l’articolo. Obbligatorio.-->
                <cbc:ID schemeID="GTIN" schemeAgencyID="9" schemeAgencyName="GS1">024787018</cbc:ID>
            </cac:StandardItemIdentification>
            <!--Articoli pericolosi. Opzionale, se usato inserire valori-->
            <cac:HazardousItem>
                <!--Codifiche degli articoli pericolosi. Opzionale, se usato inserire valori-->
                <cbc:ID>3249</cbc:ID>
                <cbc:UNDGCode listID="UNCL8273">ADR</cbc:UNDGCode>
                <cbc:TechnicalName>Medicine, solid, toxic, n.o.s.</cbc:TechnicalName>
                <cbc:CategoryName>ANTIBLASTICI</cbc:CategoryName>
                <cbc:HazardClassID>6.1</cbc:HazardClassID>
            </cac:HazardousItem>
            <!--Istanza specifica dell’articolo. Opzionale, se usato inserire valori-->
            <cac:ItemInstance>
                <!--Informazioni specifici dell'articolo. Opzionale, se usato inserire valori-->
                <cbc:ManufactureDate>2010-05-01</cbc:ManufactureDate>
                <cbc:BestBeforeDate>2022-12-31</cbc:BestBeforeDate>
                <cbc:SerialID>xyz258471</cbc:SerialID>
                <!--Lotto della merce. Opzionale, se usato inserire valori-->
                <cac:LotIdentification>
                    <cbc:LotNumberID>12346987777</cbc:LotNumberID>
                    <cbc:ExpiryDate>2018-12-31</cbc:ExpiryDate>
                </cac:LotIdentification>
            </cac:ItemInstance>
        </cac:Item>
        <!--Informazioni particolari sulla spedizione. Opzionale, se usato inserire valori-->
        <cac:Shipment>
            <!--Informazioni sulla spedizione. Se non valorizzato utilizzare 'NA'. Opzionale, se usato inserire valori-->
            <cbc:ID>NA</cbc:ID>
            <cbc:HandlingCode listID="UNCL4079">2</cbc:HandlingCode>
            <!-- Dettaglio merci sulla temperatura Celsius o Fahrenheit. Opzionale, se usato inserire valori-->
            <cac:GoodsItem>
                <cac:Temperature>
                    <cbc:AttributeID>Conservazione</cbc:AttributeID>
                    <cbc:Measure unitCode="CEL">25</cbc:Measure>
                </cac:Temperature>
                <cac:MinimumTemperature>
                    <cbc:AttributeID>Trasporto</cbc:AttributeID>
                    <cbc:Measure unitCode="CEL">2</cbc:Measure>
                </cac:MinimumTemperature>
                <cac:MaximumTemperature>
                    <cbc:AttributeID>Trasporto</cbc:AttributeID>
                    <cbc:Measure unitCode="CEL">8</cbc:Measure>
                </cac:MaximumTemperature>
            </cac:GoodsItem>
            <!--Unità logistica di trasporto. Opzionale, se usato inserire valori-->
            <cac:TransportHandlingUnit>
                <cbc:ID schemeID="SSCC" schemeAgencyName="GS1">32569</cbc:ID>
                <!--Opzionale, se usato inserire valori-->
                <cbc:TransportHandlingUnitTypeCode listID="UNECERec21">CT</cbc:TransportHandlingUnitTypeCode>
                <cbc:HazardousRiskIndicator>true</cbc:HazardousRiskIndicator>
                <cbc:ShippingMarks>Marca Prodotto</cbc:ShippingMarks>
                <!--Unità di misura. Opzionale, se usato inserire valori-->
                <cac:MeasurementDimension>
                    <cbc:AttributeID schemeID="UNCL6313">AAB</cbc:AttributeID>
                    <cbc:Measure unitCode="KGM">50</cbc:Measure>
                </cac:MeasurementDimension> 
            </cac:TransportHandlingUnit>
        </cac:Shipment>
    </cac:DespatchLine>
</DespatchAdvice>

这是 XSLT 文件:UBL2.1_DespatchAdvice.xslt

【问题讨论】:

我宁愿将 XSLT 更改为仅返回您感兴趣的 HTML 片段,而不是尝试操作您要插入的字符串。所以我们需要查看 XML 输入的相关部分、使用的 XSLT 代码、创建的结果和想要的结果。 我已经添加了 XML 文件和 XSLT 的链接,因为它太大而无法包含在问题中。 请将您的示例减少到演示问题所需的最低限度 - 请参阅:minimal reproducible example 嗯,第一个带有xsl:template match="/" 的模板会生成带有htmlheadbody 元素的HTML 结构,因此您需要对其进行编辑以仅创建正文的内容我想。 我对 XSLT 不是很精通...所以我尝试修改转换,但它现在给了我编译错误。我删除了&lt;html&gt;&lt;head&gt;&lt;body&gt; 容器并用&lt;div&gt; 替换它们。我在&lt;div&gt; 内部创建了一个作用域&lt;style&gt;(参见<style>)来维护对象的所有css 定义。 【参考方案1】:

我终于找到了一个无需编辑原始 XSLT 文件的解决方案。

我没有将输出放在DocumentContent 属性上的&lt;asp:Xml&gt; 服务器控件中,而是使用了&lt;asp:Literal&gt; 控件和Text 属性。

整个输出 HTML 将正确显示。

【讨论】:

以上是关于C# 将 Saxon XSLT 转换结果显示到当前 ASP.NET 容器页面的主要内容,如果未能解决你的问题,请参考以下文章

XSLT 函数返回不同的结果 [Saxon-EE vs Saxon-HE/PE]

XSLT 2 (Saxon):如何将多个文件读入内存

如何使用 XSLT 将刻度转换为可读的日期时间?

如何在 .NET 中使用 Saxon-HE 9.8 使用 XSLT 3.0

使用 Saxon-JS 识别 XSLT 转换的性能瓶颈

BizTalk 2020 Saxon XSLT 3.0 转换异常