当数据接口返回一个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 |