簡體   English   中英

PHP在XML中解析XML

[英]PHP parse XML within XML

我有一個XML文件,其中包含XML。 我將如何將所有內容解析為數組或對象?

<DATA>
    <ROW>
        <id>1</id>
        <message_id>123456789</message_id>
        <brand_name>SAMPLE</brand_name>
        <request_xml>
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;Email&gt;
&lt;Service&gt;
&lt;LogMessage/&gt;
&lt;Delivery&gt;
&lt;Synchronous/&gt;
&lt;/Delivery&gt;
&lt;/Service&gt;
&lt;Model&gt;
&lt;Head&gt;
&lt;From&gt;someone@example.com &lt;/From&gt;
&lt;To&gt;someone@sample.com&lt;/To&gt;
&lt;Subject&gt;Your Question&lt;/Subject&gt;
&lt;/Head&gt;
&lt;ns2:ContactUs&gt;
&lt;ns2:Sender&gt;
&lt;ns2:FirstName&gt;John&lt;/ns2:FirstName&gt;
&lt;/ns2:Sender&gt;
&lt;/ns2:ContactUs&gt;
&lt;/Model&gt;
&lt;InlineImages/&gt;
&lt;History/&gt;
&lt;/Email&gt;
        </request_xml>
        <http_status>400</http_status>
        <created_by>admin</created_by>
        <created_on>2014-09-08 01:56:59</created_on>
    </ROW>
</DATA>

我的目標是最終得到這樣的東西:

SimpleXMLElement Object
(
    [ROW] => SimpleXMLElement Object
        (
            [id] => 1
            [message_id] => 123456789
            [brand_name] => SAMPLE
            [request_xml] => SimpleXMLElement Object
                (
                    ...
                    [LogMessage] => 
                    ...
                    [from] => someone@example.com
                    ...
                )

            [http_status] => 400
            [created_by] => admin
            [created_on] => 2014-09-08 01:56:59
        )
)

我沒有在示例中放入所有級別的request_xml ,但是您明白了。 基本上,我希望像其他XML文件一樣對request_xml進行解析。

我怎樣才能做到這一點? 在此先感謝您的任何幫助!

如果您讀取request_xml元素節點的節點值,那么結果將被解碼。

$outer = new DOMDocument();
$outer->loadXml($xml);
$xpath = new DOMXpath($outer);

$innerXml = $xpath->evaluate('string(/DATA/ROW/request_xml)');
echo $innerXml;

輸出:

<?xml version="1.0" encoding="UTF-8"?>
<Email>
<Service>
<LogMessage/>
...

您可以將內部xml加載到單獨的文檔對象中。

$inner = new DOMDocument();
$inner->loadXml(trim($innerXml));
echo $inner->saveXml();

但是在您的示例中,內部XML已損壞。 它缺少ns2前綴的名稱空間定義。 如果添加,它將起作用:

演示: https : //eval.in/191279

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM