我有这个XML文件:http://www.basket.ba/ksbih/xml/200_07.xml
我已经使用了所有主要的函数和类来转换XML-to-Array,但似乎无法使它在属性上运行。
当“print_r / var_dump-ing”时,输出数据中缺少一些元素。
首先,我认为文件中存在语法错误,但事实并非如此。
我需要一个超级dooper xml2array转换。有一件事可能有用:
如果有一个超级dooper simplexml2array转换脚本/类/函数,这可能会有所帮助,因为我将以这种方式减少当前代码,
答案 0 :(得分:1)
为什么不在互联网上使用任何课程?
<?php
class xml2array {
function xml2array($xml) {
if (is_string($xml)) {
$this->dom = new DOMDocument;
$this->dom->loadXml($xml);
}
return false;
}
function _process($node) {
$occurance = array();
foreach($node->childNodes as $child) {
$occurance[$child->nodeName]++;
}
if($node->nodeType == XML_TEXT_NODE) {
$result = html_entity_decode(htmlentities($node->nodeValue, ENT_COMPAT, 'UTF-8'),
ENT_COMPAT,'ISO-8859-15');
}
else {
if($node->hasChildNodes()){
$children = $node->childNodes;
for($i=0; $i<$children->length; $i++) {
$child = $children->item($i);
if($child->nodeName != '#text') {
if($occurance[$child->nodeName] > 1) {
$result[$child->nodeName][] = $this->_process($child);
}
else {
$result[$child->nodeName] = $this->_process($child);
}
}
else if ($child->nodeName == '#text') {
$text = $this->_process($child);
if (trim($text) != '') {
$result[$child->nodeName] = $this->_process($child);
}
}
}
}
if($node->hasAttributes()) {
$attributes = $node->attributes;
if(!is_null($attributes)) {
foreach ($attributes as $key => $attr) {
$result["@".$attr->name] = $attr->value;
}
}
}
}
return $result;
}
function getResult() {
return $this->_process($this->dom);
}
}