SimpleXML &PHP:提取部分 XML 文档 &转换为数组 [英] SimpleXML & PHP: Extract part of XML document & convert as Array
本文介绍了SimpleXML &PHP:提取部分 XML 文档 &转换为数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
考虑以下 XML:
<?xml version="1.0" encoding="UTF-8"?>
<OS>
<data>
<OSes>
<centos>
<v_5>
<i386>
<id>centos5-32</id>
<name>CentOS 5 - 32 bit</name>
<version>5</version>
<architecture>32</architecture>
<os>centos</os>
</i386>
<x86_64>
<id>centos5-64</id>
<name>CentOS 5 - 64 bit</name>
<version>5</version>
<architecture>64</architecture>
<os>centos</os>
</x86_64>
</v_5>
<v_6>
<i386>
<id>centos6-32</id>
<name>CentOS 6 - 32 bit</name>
<version>6</version>
<architecture>32</architecture>
<os>centos</os>
</i386>
<x86_64>
<id>centos6-64</id>
<name>CentOS 6 - 64 bit</name>
<version>6</version>
<architecture>64</architecture>
<os>centos</os>
</x86_64>
</v_6>
</centos>
<ubuntu>
<v_10>
<i386>
<id>ubuntu10-32</id>
<name>Ubuntu 10 - 32 bit</name>
<version>10</version>
<architecture>32</architecture>
<os>ubuntu</os>
</i386>
<amd64>
<id>ubuntu10-64</id>
<name>Ubuntu 10 - 64 bit</name>
<version>10</version>
<architecture>64</architecture>
<os>ubuntu</os>
</amd64>
</v_10>
</ubuntu>
</OSes>
</data>
</OS>
从上面的 XML 文档中,我想提取以下 5 个元素节点
From the XML document above, I want to extract following 5 element node
<架构>
并将它们作为数组.我尝试执行以下操作:
And have them as a array. I tried doing the following:
<?php
require_once "xml.php";
try {
$xml = new SimpleXMLElement($xmlstr);
foreach($xml->xpath(' //id | //name | //version// | //architecture | //os ') as $record) {
echo $record;
}
} catch(Exception $e){
echo $e->getMessage();
}
上述代码有效,但每条记录都是一个单独的对象.我希望有人将所有 5 个元素节点合并为一个数组元素.像这样:
the above code works but each record is an separate object. I want someone to consolidate all 5 elements nodes as one array element. something like this:
$osList = Array( [0] => Array(
["id"] => "<id>",
["name"] => "<name>",
["version"] => "<version>",
....
)
.....
);
语法不正确,但您明白了.知道怎么做吗?
syntax isn't correct but you get the idea. any idea how to do this?
推荐答案
这可能有帮助
$obj = new SimpleXMLElement($xml);
$rtn = array();
$cnt = 0;
foreach($obj->xpath('///OSes/*/*') as $rec)
{
foreach ($rec as $rec_obj)
{
if (!isset($rtn[$cnt]))
{
$rtn[$cnt] = array();
}
foreach ($rec_obj as $name=>$val)
{
$rtn[$cnt][(string)$name] = (string)$val;
}
++$cnt;
}
}
这篇关于SimpleXML &PHP:提取部分 XML 文档 &转换为数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文