Я пытаюсь получить значения узлов «/ entry / comment [type =» subcellular location «] / subcellularLocation / location» из этого файла http://www.uniprot.org/uniprot/P12345.xml
Я использую SimpleXML и xpath, но я не могу получить доступ к этим узлам с помощью:
$var = "http://www.uniprot.org/uniprot/P12345.xml";
$Unip_result= new SimpleXMLElement($var, NULL, TRUE);
$value=$Unip_result->xpath("/entry/comment[@type='subcellular location']");
Результатом является пустой массив …
Ваш 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']");
В XML есть пространства имен, вам нужно зарегистрировать префикс для него и использовать префикс в выражении XPath. Проверьте SimpleXMLElement::registerXpathNamespace()
,