2016-10-17 3 views
1

Я просматриваю различные статьи, как сделать XML из массива PHP.SimpleXML помещает id в закрывающий тег

Получил его на работу, используя две статьи отсюда, используя SimpleXML и цикл.

Я использовал это:

function array_to_xml($data, $xml_data) { 
foreach($data as $key => $value) { 
    if(is_numeric($key)){ 
     $key = 'point id="'.$key.'"'; //dealing with <0/>..<n/> issues 
    } 
    if(is_array($value)) { 
     $subnode = $xml_data->addChild($key); 
     array_to_xml($value, $subnode); 
    } else { 
     $xml_data->addChild("$key",htmlspecialchars("$value")); 
    } 
} 

}

и делает вид работы в настоящее время.

Дело в том, что я использую многомерные массивы для отправки списков статей. Вы могли догадаться, что

<article id="sth">bla</article> 

- это вещь. Проблема заключается в том, что эта функция включает в себя идентификатор в закрывающих тегов, так что все выглядит так:

<article id="a-1-0">Example of Naming</article id="a-1-0"> 

, что делает открытие и чтение их (также с помощью SimpleXML) невозможно.

Есть ли способ настроить SimpleXML не создавать идентификатор в закрывающих тегах? Thx заранее, любая помощь имеет большую ценность.

EDIT:

Кодекс-Отрывок выше имеет дело с точечными метками. Те же проблемы Там они выглядят как

<point id="0">[...]</point id="0"> 
+0

Разве вы не используете 'addAttribute (« $ key », htmlspecialchars (« $ value »)) вместо этого? – Rimble

ответ

0

Вы можете сделать это:

$el = $xml_data->addChild('point', htmlspecialchars("$value")); 
$el->addAttribute('id', $key); 

Добавьте атрибут после добавления ребенка.

Надеюсь, что я был полезен.

+0

Часть его. Проблема в том, что у меня есть два из этих случаев. У меня есть четкие точки и серьёзные статьи внутри, которые не вышли в первую очередь, извинения. – plachty

+0

это <точка с идентификатором> <статья с идентификатором /> plachty

+0

К сожалению. Я не понял. Это не решило вашу проблему? –