xml: lang parse в PHP

<?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, описанный здесь .