我有一个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。
编辑:根据托洛马克的建议,这里有更多的信息。
元素是一个较大文档的片段,如下所示(名称已替换为***以保护无辜者):
<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();
}
回答:
默认命名空间出现问题。除非有人知道如何在simplexmleelement中注册xmlns默认名称空间,否则我选择将它们去掉而不是处理名称空间。