<?xml version="1.0" encoding="UTF-8"?> <answer> <describe data="aircompany"> <data> <code xml:lang="ru">FW</code> <code xml:lang="en">FW</code> </data> <data> <code xml:lang="ru">UT</code> <code xml:lang="en">ЮТ</code> </data> </describe> </answer>
Мне нужно получить значение узлов, там xml: lang = "en". Как это можно сделать в PHP?
Да, SimpleXML работает, но попробуйте добавить пространство имен xml, если у вас возникнут проблемы.
Например:
<?php $xmlstr = <<<XML <?xml version="1.0" encoding="UTF-8"?> <answer xmlns:xml="http://www.w3.org/XML/1998/namespace"> <describe data="aircompany"> <data> <code xml:lang="ru">ФВ</code> <code xml:lang="en">FW</code> </data> <data> <code xml:lang="ru">УТ</code> <code xml:lang="en">UT</code> </data> </describe> </answer> XML; $xml = new SimpleXMLElement($xmlstr); foreach ($xml->xpath('//data/code[@xml:lang="en"]') as $code) { echo $code, '<br/>', PHP_EOL; } ?>
XPath имеет специальную конструкцию для работы с атрибутом xml: lang:
$xml = new SimpleXMLElement($strXML); $data = $xml->describe->data[0]; $elCode = $data->xpath("code[lang('en')]"); // returns array of SimpleXMLElement assert(count($elCode)==1); $code_en = (string) $elCode[0];
как$xml = new SimpleXMLElement($strXML); $data = $xml->describe->data[0]; $elCode = $data->xpath("code[lang('en')]"); // returns array of SimpleXMLElement assert(count($elCode)==1); $code_en = (string) $elCode[0];
PS приветствия Сирене;)
Благодарю. Я использую этот метод:
$XMLObj = new SimpleXMLElement($XML); print_r($XMLObj->xpath('/answer/describe/data/code[@xml:lang = "en"]'));
Был получен ответ:
$dom =new DOMDocument; $dom->loadXML( $xml ); $xPath = new DOMXPath( $dom ); $nodes = $xPath->query( '/answer/describe/data/code[@xml:lang = "en"]' ); foreach( $nodes as $node ) { echo $node->nodeValue; }
Альтернатива без XPath:
$dom =new DOMDocument; $dom->loadXML ($xml ); foreach( $dom->getElementsByTagName( 'code' ) as $node ) { if( $node->getAttribute( 'xml:lang' ) === 'en') { echo $node->nodeValue; } }
Посмотрите на парсер PHP SAX, описанный здесь .