Вопрос по php, xml, namespaces – Как мне проанализировать XML, содержащий пользовательские пространства имен, с помощью SimpleXML? [Дубликат]

2

На этот вопрос уже есть ответ:

Reference - как мне обрабатывать пространства имен (теги и атрибуты с двоеточием в) в SimpleXML? 1 ответ

Мне интересно, как разобрать значения в XML, которые, кажется, имеют: в их имени. Я использую:

$response   = file_get_contents($url);
$data = simplexml_load_string($response);

затем делает:

foreach($data->item as $key => $current){

Однако у одного из последних каналов, которые мне дали, в названии канала есть двоеточия, как показано в примере ниже:

<item>
  <title>foo</title>
  <description>foo</description>           
  <ccc:fid>10</ccc:fid>
  <ccc:bid>6</ccc:bid>
 </item>

Когда я пытаюсь создать php-файл $ current-> ccc: bid, он не становится счастливым (это справедливо). Есть ли способ обойти это?

Ваш Ответ

3   ответа
2

fid является расширением пространства имен, которое должно быть объявлено в xml, чтобы иметь возможность использовать его в таких библиотеках, как simplexml.

Вот несколько примеров описаний нас в пространстве имен:

http: //www.w3.org/TR/1999/REC-xml-names-19990114http: //www.w3.org/TR/xml-names

Надеюсь, это поможет, хотя и немного сложнее.

Ширс, не знал про пространства имен. Спасибо Petrogad
2

"Ccc" - это пространство имен - вы должны быть в состоянии сделать

$current->fid
3

Элементы с двоеточиями используют префиксы пространства имен, и это совершенно правильный XML. При одновременном использовании нескольких схем пространства имен помогают различать элементы с одинаковыми именами. То, как объекты SimpleXMLElement в PHP обрабатывают это, вы можете по существу игнорировать часть перед двоеточием:

$current->fid;

Если вы хотите узнать часть имени элемента в пространстве имен, вы можете сделать:

$current->fid->getNamespaces();

Похожие вопросы