Разобрать XML-файл с помощью Simple XML и xpath

Я пытаюсь получить значения узлов «/ 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']");

Результатом является пустой массив …

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']");
0

Другие решения

В XML есть пространства имен, вам нужно зарегистрировать префикс для него и использовать префикс в выражении XPath. Проверьте SimpleXMLElement::registerXpathNamespace(),

1

По вопросам рекламы [email protected]