我想解析xml文件,到目前为止,我发现最好的方法是使用DOMDocument()类。
示例xml字符串:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<response>
<resData>
<contact:infData xmlns:contact="http://example.com/contact-1.0">
<contact:status s="value1"/>
<contact:status s="value2"/>
<contact:status s="value3"/>
<contact:status s="value4"/>
</contact:infData>
</resData>
</response>
我使用函数dom2array(如下)来解析dom,但是它只返回1个元素(仅值4)
<?php
function dom2array($node) {
$res = array();
if($node->nodeType == XML_TEXT_NODE){
$res = $node->nodeValue;
}else{
if($node->hasAttributes()){
$attributes = $node->attributes;
if(!is_null($attributes)){
$res['@attributes'] = array();
foreach ($attributes as $index=>$attr) {
$res['@attributes'][$attr->name] = $attr->value;
}
}
}
if($node->hasChildNodes()){
$children = $node->childNodes;
for($i=0;$i<$children->length;$i++){
$child = $children->item($i);
$res[$child->nodeName] = dom2array($child);
}
}
}
return $res;
}
?>
有没有办法解析所有xml元素并将它们发送到数组?
输出数组:
Array
(
[response] => Array
(
[#text] =>
[resData] => Array
(
[#text] =>
[contact:infData] => Array
(
[#text] =>
[contact:status] => Array
(
[@attributes] => Array
(
[s] => value4
)
)
)
)
)
)
其中value1,value2,value3?:(谢谢你
您可以使用它(基于:http://php.net/manual/en/book.dom.php#93717);
function xml_to_array($root) {
$result = array();
if ($root->hasAttributes()) {
$attrs = $root->attributes;
foreach ($attrs as $attr) {
$result['@attributes'][$attr->name] = $attr->value;
}
}
if ($root->hasChildNodes()) {
$children = $root->childNodes;
if ($children->length == 1) {
$child = $children->item(0);
if ($child->nodeType == XML_TEXT_NODE) {
$result['_value'] = $child->nodeValue;
return count($result) == 1
? $result['_value']
: $result;
}
}
$groups = array();
foreach ($children as $child) {
if (!isset($result[$child->nodeName])) {
$result[$child->nodeName] = xml_to_array($child);
} else {
if (!isset($groups[$child->nodeName])) {
$result[$child->nodeName] = array($result[$child->nodeName]);
$groups[$child->nodeName] = 1;
}
$result[$child->nodeName][] = xml_to_array($child);
}
}
}
return $result;
}
测试;
$s = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<response>
<resData foo="1">
<contact:infData xmlns:contact="http://example.com/contact-1.0" bar="1">
<contact:status s="value1"/>
<contact:status s="value2"/>
<contact:status s="value3"/>
<contact:status s="value4"/>
</contact:infData>
</resData>
</response>';
$xml = new DOMDocument();
$xml->loadXML($s);
$xmlArray = xml_to_array($xml);
print_r($xmlArray);
// print_r($xmlArray['response']['resData']['contact:infData']['contact:status'][0]['@attributes']['s']);
// foreach ($xmlArray['response']['resData']['contact:infData']['contact:status'] as $status) {
// echo $status['@attributes']['s'] ."\n";
// }
问题内容: 哪个AJAX库最适合Django,为什么? 寻找一个包含大量教程,书籍和详细文档的数据库。 哪一个是最容易使用的?哪一个处于早期开发阶段,但对未来显示出巨大的希望? 问候, 克里斯 问题答案: 我强烈推荐jQuery。有一些有关如何实现它的教程。 http://lethain.com/entry/2007/dec/11/two-faced-django-part-5-jquery- a
问题内容: 寻找JavaScript 中 阶乘 函数的真正快速实现。有什么建议吗? 问题答案: 您可以[搜索(1 …100)!在WolframAlpha上预先计算阶乘序列。 前100个数字是: 如果仍要自己计算值,则可以使用备忘录: 编辑:21.08.2014 解决方案2 我认为添加一个 懒惰的* 迭代 阶乘函数 的工作示例将很有用,该 函数 使用 大数 来获得带有 备忘录的 准确 结果,并将 缓
问题内容: 是的,我知道Ajax是一个愚蠢的名词,但是我需要一个像样的详尽教程。谁能指出我最好的一个? 问题答案: W3schools总是帮助我。 http://www.w3schools.com/Ajax/Default.Asp
本文向大家介绍为什么Ember.js是最好的javascript框架?,包括了为什么Ember.js是最好的javascript框架?的使用技巧和注意事项,需要的朋友参考一下 ember成为javascript顶级Web开发框架之一的原因很多。其中一些原因是- 由于内置了模板解决方案,因此无需编写太多代码。 灰烬的固执己见的体系结构可避免在不重要的决策上浪费时间。 友好的API,使应用程序开发高效
问题内容: 我正在构建一个需要搜索功能的Django项目,直到出现,我必须选择一个搜索应用程序。那么,哪个最好?“最好”是指… 易于安装/设置 具有Django或至少Python友好的API 可以执行相当复杂的搜索 这是我听说过的一些应用程序,如果你知道其中任何一个,请建议其他应用程序: djangosearch django-sphinx 我还想避免使用第三方搜索引擎(例如Google Site
我和JNI有一个Android项目。在实现侦听器类的CPP文件中,有一个回调x()。调用x()函数时,我想调用java类中的另一个函数。然而,为了调用该java函数,我需要访问JNIEnv*。 我知道在回调的同一个cpp文件中,有一个函数: 当