2014-09-23 85 views
0

我試圖獲取節點的值從該文件http://www.uniprot.org/uniprot/P12345.xml用簡單的XML和XPath

我「/項/註釋[TYPE =」亞細胞定位「]/subcellularLocation /位置」解析XML文件使用SimpleXML和XPath,但我不能訪問這個M個節點有:

$var = "http://www.uniprot.org/uniprot/P12345.xml"; 
$Unip_result= new SimpleXMLElement($var, NULL, TRUE); 

$value=$Unip_result->xpath("/entry/comment[@type='subcellular location']"); 

結果是一個空數組...

回答

0

您的XML具有默認名稱空間(沒有前綴的那個:xmlns="....")。聲明默認名稱空間的元素及其所有後代都沒有前綴且沒有不同默認名稱空間的元素在祖先的默認名稱空間中被考慮。因此,您需要註冊指向默認名稱空間URI的前綴,並在XPath中使用該前綴:

$var = "http://www.uniprot.org/uniprot/P12345.xml"; 
$Unip_result = new SimpleXMLElement($var, NULL, TRUE); 
$Unip_result->registerXPathNamespace('ns', 'http://uniprot.org/uniprot'); 

$value = $Unip_result->xpath("/ns:uniprot/ns:entry/ns:comment[@type='subcellular location']"); 
1

的XML命名空間有,你需要註冊一個前綴,並在XPath表達式中使用前綴。檢查SimpleXMLElement::registerXpathNamespace()