返回「假」我有一個XML片段作爲這樣:XPath查詢SimpleXML中
<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']");
但這返回false。
我曾嘗試:
/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();
}
答案:問題是默認的命名空間。我選擇將它們去掉而不是處理名稱空間,除非有人知道如何在SimpleXMLElement中註冊xmlns默認名稱空間。
可能相關:您使用的是PHP和libxml的版本? (一個[phpinfo](http://php.net/phpinfo)()頁面會告訴你) – salathe 2010-04-07 08:37:01
這是否可以省略你的XML在命名空間中的微小但相關的事實? – Tomalak 2010-04-07 11:39:31
@salathe libxml:2.7.3,PHP 5.2.9-2(Win) – Drew 2010-04-07 23:26:50