PHP解析XML

当数据接口返回一个xml数据的页面,如果想对其数据进行处理,那么第一步要做的就是解析里面的数据,将其取出后再由需求进行下一步处理。在php里有处理doc等类似的功能,其实xml也是一样,在这里直接用实例的方式简单应用以下。

xmlData:

<DOCUMENT><item><startcity>阿城</startcity><stopcity>鞍山</stopcity></item><item><startcity>阿城</startcity><stopcity>八面通</stopcity></item><item><startcity>阿城</startcity><stopcity>北安</stopcity></item><item><startcity>阿城</startcity><stopcity>北戴河</stopcity></item><item><startcity>阿城</startcity><stopcity>北京</stopcity></item>
<item><startcity>碧水</startcity><stopcity>富裕</stopcity></item></DOCUMENT>


这时显示出来的xml数据,想要取得里面需要的时候,那么就必须要进行解析。

code:

<?php
//挂载xml处理类,并标识其版本
//Document 对象是一棵文档树的根,可为我们提供对文档数据的最初(或最顶层)的访问入口。
//用于元素节点、文本节点、注释、处理指令等均无法存在于 document 之外,document 对象同样提供了创建这些对象的方法。Node 对象提供了一个 ownerDocument 属性,此属性可把它们与在其中创建它们的 Document 关联起来。
$dom = new DOMDocument('1.0');
//加载xml数据
$dom->loadXML($xmlData);
//simplexml_import_dom() 函数把 DOM 节点转换为 SimpleXMLElement 对象。
//如果失败,则该函数返回 false。
$xml = simplexml_import_dom($dom);
?>

如果要取得每一个item节点的数据:
code:

<?php
foreach ($xml as $key=>$value){
echo "<pre>";
print_r($value);
echo "</pre>";
}
?>

打印结果如下:

SimpleXMLElement Object
(
    [startcity] => 阿城
    [stopcity] => 鞍山
)

SimpleXMLElement Object
(
    [startcity] => 阿城
    [stopcity] => 八面通
)

SimpleXMLElement Object
(
    [startcity] => 阿城
    [stopcity] => 北安
)
......

如果只想取得startcity。
code:

<?php
foreach ($xml as $key=>$value){
echo "<pre>";
print_r($value->stopcity);
echo "</pre>";
}
?>

小知识补充:

IE: Internet Explorer, F: Firefox, O: Opera, W3C: 万维网联盟 (因特网标准)

Document 对象的属性

属性 描述 IE F O W3C
async 规定 XML 文件的下载是否应当被同步处理。 5 1.5 9 No
childNodes 返回属于文档的子节点的节点列表。 5 1 9 Yes
doctype 返回与文档相关的文档类型声明 (DTD)。 6 1 9 Yes
documentElement 返回文档的根节点 5 1 9 Yes
documentURI 设置或返回文档的位置 No 1 9 Yes
domConfig 返回normalizeDocument()被调用时所使用的配置 No Yes
firstChild 返回文档的首个子节点 5 1 9 Yes
implementation 返回处理该文档的 DOMImplementation 对象。 No 1 9 Yes
inputEncoding 返回用于文档的编码方式(在解析时)。 No 1 No Yes
lastChild 返回文档的最后一个子节点。 5 1 9 Yes
nodeName 依据节点的类型返回其名称。 5 1 9 Yes
nodeType 返回节点的节点类型。 5 1 9 Yes
nodeValue 根据节点的类型来设置或返回节点的值。 5 1 9 Yes
strictErrorChecking 设置或返回是否强制进行错误检查。 No 1 No Yes
text 返回节点及其后代的文本(仅用于 IE)。 5 No No No
xml 返回节点及其后代的 XML(仅用于 IE)。 5 No No No
xmlEncoding 返回文档的编码方法。 No 1 No Yes
xmlStandalone 设置或返回文档是否为 standalone。 No 1 No Yes
xmlVersion 设置或返回文档的 XML 版本。 No 1 No Yes

Document 对象的方法

属性 描述 IE F O W3C
adoptNode(sourcenode) 从另一个文档向本文档选定一个节点,然后返回被选节点。 No Yes
createAttribute(name) 创建拥有指定名称的属性节点,并返回新的 Attr 对象。 6 1 9 Yes
createAttributeNS(uri,name) 创建拥有指定名称和命名空间的属性节点,并返回新的 Attr 对象。 9 Yes
createCDATASection() 创建 CDATA 区段节点。 5 1 9 Yes
createComment() 创建注释节点。 6 1 9 Yes
createDocumentFragment() 创建空的 DocumentFragment 对象,并返回此对象。 5 1 9 Yes
createElement() 创建元素节点。 5 1 9 Yes
createElementNS() 创建带有指定命名空间的元素节点。 No 1 9 Yes
createEvent() 创建新的 Event 对象。 Yes
createEntityReference(name) 创建 EntityReference 对象,并返回此对象。 5 No Yes
createExpression() 创建一个XPath表达式以供稍后计算。 Yes
createProcessingInstruction() 创建 ProcessingInstruction 对象,并返回此对象。 5 9 Yes
createRange() 创建 Range 对象,并返回此对象。 No Yes
evaluate() 计算一个 XPath 表达式。 No 1 9 Yes
createTextNode() 创建文本节点。 5 1 9 Yes
getElementById() 查找具有指定的唯一 ID 的元素。 5 1 9 Yes
getElementsByTagName() 返回所有具有指定名称的元素节点。 5 1 9 Yes
getElementsByTagNameNS() 返回所有具有指定名称和命名空间的元素节点。 No 1 9 Yes
importNode() 把一个节点从另一个文档复制到该文档以便应用。 9 Yes
loadXML() 通过解析XML标签字符串来组成文档。
normalizeDocument() No Yes
renameNode() 重命名元素或者属性节点。 No Yes