【发布时间】:2014-09-10 09:41:50
【问题描述】:
我有一个 XML 文件,其中包含 XML。我将如何将所有内容解析为数组或对象?
<DATA>
<ROW>
<id>1</id>
<message_id>123456789</message_id>
<brand_name>SAMPLE</brand_name>
<request_xml>
<?xml version="1.0" encoding="UTF-8"?>
<Email>
<Service>
<LogMessage/>
<Delivery>
<Synchronous/>
</Delivery>
</Service>
<Model>
<Head>
<From>someone@example.com </From>
<To>someone@sample.com</To>
<Subject>Your Question</Subject>
</Head>
<ns2:ContactUs>
<ns2:Sender>
<ns2:FirstName>John</ns2:FirstName>
</ns2:Sender>
</ns2:ContactUs>
</Model>
<InlineImages/>
<History/>
</Email>
</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 的所有级别,但你明白了。基本上我希望 request_xml 像 XML 文件的其余部分一样被解析。
我怎样才能做到这一点?提前感谢您对此提供的任何帮助!
【问题讨论】:
-
为什么不只解析 SimpleXML 中的主字符串,提取子字符串,将其解析为 SimpleXML 并将子 XML 作为节点添加到主 XML?
-
我将如何处理编码?
-
您可以将
html_entity_decode或str_replace与一组特定的实体一起使用。 -
为了处理编码,我最终使用了
simplexml_load_string($xmlfile, 'SimpleXMLElement', LIBXML_NOENT);,所以我不需要使用html_entity_decode。