У меня есть фрагмент XML как таковой:
<meta_tree type="root">
<meta_data>
<meta_cat>Content Provider</meta_cat>
<data>Mammoth</data>
</meta_data>
<meta_data>
<meta_cat>Genre</meta_cat>
<data>Games</data>
</meta_data>
<meta_data>
<meta_cat>Channel Name</meta_cat>
<data>Games Trailers</data>
</meta_data>
<meta_data>
<meta_cat>Collection</meta_cat>
<data>Strategy</data>
</meta_data>
<meta_data>
<meta_cat>Custom 1</meta_cat>
<data>PC</data>
</meta_data>
<meta_data>
<meta_cat>DRM Protected</meta_cat>
<data>N</data>
</meta_data>
<meta_data>
<meta_cat>Aspect Ratio</meta_cat>
<data>16:9</data>
</meta_data>
<meta_data>
<meta_cat>Streaming Type</meta_cat>
<data>VOD</data>
</meta_data>
</meta_tree>
, который я получил из фрагмента $meta_tree->asXML()
.
Итак, мне нужно иметь запрос xpath для каждого элемента, поэтому я использую:
$meta_tree->xpath("/meta_data[meta_cat='Content Provider']");
но это возвращает ложь.
Я пытался:
/meta_tree/meta_data[meta_cat='Content Provider']
//meta_data[meta_cat='Content Provider']
meta_data[meta_cat='Content Provider']
(возвращает массив, но массив пуст)
Я использовал AquaPath , который проверяет мой запрос, поэтому я не уверен, что делаю неправильно.
У кого-нибудь есть идеи?
DJS.
РЕДАКТИРОВАТЬ: Согласно предложению Tolomak, вот еще немного информации.
Элемент представляет собой фрагмент большего документа, как показано ниже (имена были заменены на *** для защиты невинных):
<contents total_items="1" xmlns="http://rxml.***.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://rxml.***.com/xsd/*Ingestion.xsd ">
<content item_id="451195">
...
<meta_tree type="root">
... see snippet above ...
</meta_tree>
</content>
</contents>
Я получаю фрагмент выше по:
$dom = new SimpleXMLElement(... xml_string ... );
foreach($dom->content as $content)
{
$contentMetadata = $this->getMetadata($content->meta_tree)
}
public function getMetadata($meta_tree)
{
echo $meta_tree->asXML();
}
ОТВЕТ: проблема в пространстве имен по умолчанию. Я решил удалить их, а не работать с пространством имен, если только кто-нибудь не знает, как зарегистрировать пространство имен по умолчанию xmlns в SimpleXMLElement.