使用xsl stylesheet将display xml作为可视格式出现问题

时间:2018-01-26 08:10:50

标签: php xml curl xslt xhtml

你好我正在编写xml文件使用我得到卷曲响应为xml格式。它的样式表已经包含为.xsl格式,但是当我在浏览器中打开xml时,它不会显示为视觉样式格式。请看下面是我的xml我在xml文件中写的内容。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml-stylesheet href="https://express.tnt.com/expresswebservices-website/stylesheets/HTMLConsignmentNoteRenderer.xsl" type="text/xsl"?>
<CONSIGNMENTBATCH>
    <BARCODEURL>/barbecue/barcode?type=code39&amp;height=70&amp;width=1&amp;data=</BARCODEURL>
    <HOST>https://express.tnt.com</HOST>
    <IMAGESDIR>/expresswebservices-website/rendering/images</IMAGESDIR>
    <CONSIGNMENT originCountry="AU" marketType="INTERNATIONAL">
        <HEADER last="true">
            <SHIPMENTDATE>29/01/2018</SHIPMENTDATE>
            <SENDER>
                <COMPANYNAME><![CDATA[Sender Co 01-008]]></COMPANYNAME>
                <STREETADDRESS1><![CDATA[TEST DO NOT COLLECT1]]></STREETADDRESS1>
                <STREETADDRESS2><![CDATA[TEST DO NOT COLLECT2]]></STREETADDRESS2>
                <STREETADDRESS3><![CDATA[TEST DO NOT COLLECT3]]></STREETADDRESS3>
                <CITY><![CDATA[Hoppers Crossing]]></CITY>
                <POSTCODE>3029</POSTCODE>
                <COUNTRY>AUSTRALIA</COUNTRY>
                <CONTACTNAME><![CDATA[Mr Contact]]></CONTACTNAME>
                <CONTACTDIALCODE>01827</CONTACTDIALCODE>
                <CONTACTTELEPHONE>717733</CONTACTTELEPHONE>
                <CONTACTEMAIL>contact@tnt.com</CONTACTEMAIL>
                <ACCOUNT>30017823</ACCOUNT>
            </SENDER>
            <COLLECTION>
                <COMPANYNAME><![CDATA[Collection Name]]></COMPANYNAME>
                <STREETADDRESS1><![CDATA[TEST DO NOT COLLECT4]]></STREETADDRESS1>
                <STREETADDRESS2><![CDATA[TEST DO NOT COLLECT5]]></STREETADDRESS2>
                <STREETADDRESS3><![CDATA[TEST DO NOT COLLECT6]]></STREETADDRESS3>
                <CITY><![CDATA[Hoppers Crossing]]></CITY>
                <POSTCODE>3029</POSTCODE>
                <COUNTRY>AUSTRALIA</COUNTRY>
                <CONTACTNAME><![CDATA[Mr Contact]]></CONTACTNAME>
                <CONTACTDIALCODE>00000</CONTACTDIALCODE>
                <CONTACTTELEPHONE>700005</CONTACTTELEPHONE>
                <CONTACTEMAIL>contact@tnt.com</CONTACTEMAIL>
            </COLLECTION>
            <CARRIAGEFORWARD>N</CARRIAGEFORWARD>
        </HEADER>
        <RECEIVER>
            <COMPANYNAME><![CDATA[Receiver Name]]></COMPANYNAME>
            <STREETADDRESS1><![CDATA[TEST DO NOT COLLECT7]]></STREETADDRESS1>
            <STREETADDRESS2><![CDATA[TEST DO NOT COLLECT8]]></STREETADDRESS2>
            <STREETADDRESS3><![CDATA[TEST DO NOT COLLECT9]]></STREETADDRESS3>
            <CITY><![CDATA[Amsterdam]]></CITY>
            <POSTCODE>1100 AA</POSTCODE>
            <COUNTRY>NETHERLANDS</COUNTRY>
            <CONTACTNAME><![CDATA[Mr Frank]]></CONTACTNAME>
            <CONTACTDIALCODE>1672</CONTACTDIALCODE>
            <CONTACTTELEPHONE>987432</CONTACTTELEPHONE>
            <CONTACTEMAIL>email@mail.com</CONTACTEMAIL>
            <VAT>7668880</VAT>
        </RECEIVER>
        <DELIVERY>
            <COMPANYNAME><![CDATA[Delivery Name]]></COMPANYNAME>
            <STREETADDRESS1><![CDATA[TEST DO NOT COLLECT10]]></STREETADDRESS1>
            <STREETADDRESS2><![CDATA[TEST DO NOT COLLECT11]]></STREETADDRESS2>
            <STREETADDRESS3><![CDATA[TEST DO NOT COLLECT12]]></STREETADDRESS3>
            <CITY><![CDATA[Amsterdam]]></CITY>
            <POSTCODE>1100 AA</POSTCODE>
            <COUNTRY>NETHERLANDS</COUNTRY>
            <CONTACTNAME><![CDATA[Mr Frank]]></CONTACTNAME>
            <CONTACTDIALCODE>1672</CONTACTDIALCODE>
            <CONTACTTELEPHONE>987432</CONTACTTELEPHONE>
            <CONTACTEMAIL>email@mail.com</CONTACTEMAIL>
            <VAT>7668880</VAT>
        </DELIVERY>
        <TOTALVOLUME units="m3">0.649</TOTALVOLUME>
        <TOTALWEIGHT units="kg">3.60</TOTALWEIGHT>
        <CUSTOMERREF><![CDATA[DISKS]]></CUSTOMERREF>
        <CONSIGNMENTTYPE>N</CONSIGNMENTTYPE>
        <CONNUMBER>GE161714365AU</CONNUMBER>
        <SERVICE>48N Economy Express</SERVICE>
        <INSURANCEVALUE>150.00</INSURANCEVALUE>
        <GOODSDESC1><![CDATA[assorted office accessories]]></GOODSDESC1>
        <TOTALITEMS>6</TOTALITEMS>
        <GOODSVALUE>180.00</GOODSVALUE>
        <DELIVERYINST><![CDATA[Delivery Instructions TEST]]></DELIVERYINST>
        <OPTION1></OPTION1>
        <OPTION2></OPTION2>
        <OPTION3></OPTION3>
        <OPTION4></OPTION4>
        <OPTION5></OPTION5>
        <CURRENCY>GBP</CURRENCY>
        <INSURANCECURRENCY>GBP</INSURANCECURRENCY>
        <PAYMENTIND>S</PAYMENTIND>
        <CONREF>ref01_008</CONREF>
        <STATCODE>ABC</STATCODE>
    </CONSIGNMENT>
</CONSIGNMENTBATCH>

有关使用样式表显示my xml的任何建议。如果xml到html的显示方式有可能吗?

我使用php作为curl的后端脚本来获得高于xml的响应。

1 个答案:

答案 0 :(得分:0)

您可以使用DOMDocument和属于PHP的XSLProcessor

<?php

    $strXML='<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml-stylesheet href="https://express.tnt.com/expresswebservices-website/stylesheets/HTMLConsignmentNoteRenderer.xsl" type="text/xsl"?>
<CONSIGNMENTBATCH>
    <BARCODEURL>/barbecue/barcode?type=code39&amp;height=70&amp;width=1&amp;data=</BARCODEURL>
    <HOST>https://express.tnt.com</HOST>
    <IMAGESDIR>/expresswebservices-website/rendering/images</IMAGESDIR>
    <CONSIGNMENT originCountry="AU" marketType="INTERNATIONAL">
        <HEADER last="true">
            <SHIPMENTDATE>29/01/2018</SHIPMENTDATE>
            <SENDER>
                <COMPANYNAME><![CDATA[Sender Co 01-008]]></COMPANYNAME>
                <STREETADDRESS1><![CDATA[TEST DO NOT COLLECT1]]></STREETADDRESS1>
                <STREETADDRESS2><![CDATA[TEST DO NOT COLLECT2]]></STREETADDRESS2>
                <STREETADDRESS3><![CDATA[TEST DO NOT COLLECT3]]></STREETADDRESS3>
                <CITY><![CDATA[Hoppers Crossing]]></CITY>
                <POSTCODE>3029</POSTCODE>
                <COUNTRY>AUSTRALIA</COUNTRY>
                <CONTACTNAME><![CDATA[Mr Contact]]></CONTACTNAME>
                <CONTACTDIALCODE>01827</CONTACTDIALCODE>
                <CONTACTTELEPHONE>717733</CONTACTTELEPHONE>
                <CONTACTEMAIL>contact@tnt.com</CONTACTEMAIL>
                <ACCOUNT>30017823</ACCOUNT>
            </SENDER>
            <COLLECTION>
                <COMPANYNAME><![CDATA[Collection Name]]></COMPANYNAME>
                <STREETADDRESS1><![CDATA[TEST DO NOT COLLECT4]]></STREETADDRESS1>
                <STREETADDRESS2><![CDATA[TEST DO NOT COLLECT5]]></STREETADDRESS2>
                <STREETADDRESS3><![CDATA[TEST DO NOT COLLECT6]]></STREETADDRESS3>
                <CITY><![CDATA[Hoppers Crossing]]></CITY>
                <POSTCODE>3029</POSTCODE>
                <COUNTRY>AUSTRALIA</COUNTRY>
                <CONTACTNAME><![CDATA[Mr Contact]]></CONTACTNAME>
                <CONTACTDIALCODE>00000</CONTACTDIALCODE>
                <CONTACTTELEPHONE>700005</CONTACTTELEPHONE>
                <CONTACTEMAIL>contact@tnt.com</CONTACTEMAIL>
            </COLLECTION>
            <CARRIAGEFORWARD>N</CARRIAGEFORWARD>
        </HEADER>
        <RECEIVER>
            <COMPANYNAME><![CDATA[Receiver Name]]></COMPANYNAME>
            <STREETADDRESS1><![CDATA[TEST DO NOT COLLECT7]]></STREETADDRESS1>
            <STREETADDRESS2><![CDATA[TEST DO NOT COLLECT8]]></STREETADDRESS2>
            <STREETADDRESS3><![CDATA[TEST DO NOT COLLECT9]]></STREETADDRESS3>
            <CITY><![CDATA[Amsterdam]]></CITY>
            <POSTCODE>1100 AA</POSTCODE>
            <COUNTRY>NETHERLANDS</COUNTRY>
            <CONTACTNAME><![CDATA[Mr Frank]]></CONTACTNAME>
            <CONTACTDIALCODE>1672</CONTACTDIALCODE>
            <CONTACTTELEPHONE>987432</CONTACTTELEPHONE>
            <CONTACTEMAIL>email@mail.com</CONTACTEMAIL>
            <VAT>7668880</VAT>
        </RECEIVER>
        <DELIVERY>
            <COMPANYNAME><![CDATA[Delivery Name]]></COMPANYNAME>
            <STREETADDRESS1><![CDATA[TEST DO NOT COLLECT10]]></STREETADDRESS1>
            <STREETADDRESS2><![CDATA[TEST DO NOT COLLECT11]]></STREETADDRESS2>
            <STREETADDRESS3><![CDATA[TEST DO NOT COLLECT12]]></STREETADDRESS3>
            <CITY><![CDATA[Amsterdam]]></CITY>
            <POSTCODE>1100 AA</POSTCODE>
            <COUNTRY>NETHERLANDS</COUNTRY>
            <CONTACTNAME><![CDATA[Mr Frank]]></CONTACTNAME>
            <CONTACTDIALCODE>1672</CONTACTDIALCODE>
            <CONTACTTELEPHONE>987432</CONTACTTELEPHONE>
            <CONTACTEMAIL>email@mail.com</CONTACTEMAIL>
            <VAT>7668880</VAT>
        </DELIVERY>
        <TOTALVOLUME units="m3">0.649</TOTALVOLUME>
        <TOTALWEIGHT units="kg">3.60</TOTALWEIGHT>
        <CUSTOMERREF><![CDATA[DISKS]]></CUSTOMERREF>
        <CONSIGNMENTTYPE>N</CONSIGNMENTTYPE>
        <CONNUMBER>GE161714365AU</CONNUMBER>
        <SERVICE>48N Economy Express</SERVICE>
        <INSURANCEVALUE>150.00</INSURANCEVALUE>
        <GOODSDESC1><![CDATA[assorted office accessories]]></GOODSDESC1>
        <TOTALITEMS>6</TOTALITEMS>
        <GOODSVALUE>180.00</GOODSVALUE>
        <DELIVERYINST><![CDATA[Delivery Instructions TEST]]></DELIVERYINST>
        <OPTION1></OPTION1>
        <OPTION2></OPTION2>
        <OPTION3></OPTION3>
        <OPTION4></OPTION4>
        <OPTION5></OPTION5>
        <CURRENCY>GBP</CURRENCY>
        <INSURANCECURRENCY>GBP</INSURANCECURRENCY>
        <PAYMENTIND>S</PAYMENTIND>
        <CONREF>ref01_008</CONREF>
        <STATCODE>ABC</STATCODE>
    </CONSIGNMENT>
</CONSIGNMENTBATCH>';



    $xml = new DOMDocument;
    $xml->loadXML( $strXML );

    $xsl = new DOMDocument;
    $xsl->load('https://express.tnt.com/expresswebservices-website/stylesheets/HTMLConsignmentNoteRenderer.xsl');

    // Configure the transformer
    $proc = new XSLTProcessor;
    $proc->importStyleSheet($xsl); // attach the xsl rules

    echo $proc->transformToXML($xml);

?>

可以通过生成自己的xsl样式表并调整路径来纠正缺少可渲染徽标。您可以找到tweaked xsl file here〜将副本保存到您的网络服务器并在处理中使用

$xslt=__DIR__ . '/tntxsl.xsl';/* saved copy of tweaked xsl file */



$xml = new DOMDocument;
$xml->loadXML( $strXML );

$xsl = new DOMDocument;
$xsl->load( $xslt );

$proc = new XSLTProcessor;
if( !$proc->hasExsltSupport() ) {
    exit('NO XSLT support');
}
$proc->importStyleSheet( $xsl );
echo $proc->transformToXML( $xml );

enter image description here