【问题标题】:issue with display xml as visual format using xsl stylesheet使用 xsl 样式表将 xml 显示为可视格式的问题
【发布时间】:2018-07-05 13:50:57
【问题描述】:

你好,我正在使用我正在以 xml 格式获取 curl 响应来编写 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>

任何关于使用样式表显示我的 xml 的建议。是否可以通过任何方式将 xml 显示为 html?

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

【问题讨论】:

  • XSLT 文件是什么样的?
  • 我不确定我是否理解您的问题,但请尝试将您的类型更改为:type="text/html"

标签: php xml curl xslt xhtml


【解决方案1】:

您可以使用 DOMDocumentXSLProcessor,它们是 PHP 的一部分

<?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 );

【讨论】:

  • 看起来他们的 xsl 文件中有错误 - 徽标在路径中有反斜杠而不是正斜杠,并且徽标图像不会呈现。
  • 有什么方法可以将 tranformxml 保存为 pdf 吗?
  • 我会说你可以,但这是另一个问题。看看dompdf
  • 我需要为此提出另一个问题吗?
  • 我会这么说 - 我不知道该怎么做,这样您才能更好地回答新问题。如果上述内容对原始问题有所帮助,请考虑将问题标记为已解决
猜你喜欢
  • 2015-11-24
  • 2012-04-03
  • 1970-01-01
  • 2015-10-13
  • 2012-04-01
  • 2013-09-06
  • 2014-12-20
  • 2018-09-21
  • 1970-01-01
相关资源
最近更新 更多