2010-10-22 22 views
5
<?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> 

Necesito obtener nodos de valor, hay xml: lang = "en". ¿Cómo puede hacerlo en PHP?xml: lang parse en PHP

Respuesta

4

Sí, SimpleXML funciona, pero trate de añadir el xml namespace si llegas a tener problemas.

ej .:

<?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; 
} 
?> 
1

ha sido respondida antes:

$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; 
} 

Alternativa sin XPath:

$dom =new DOMDocument; 
$dom->loadXML ($xml); 
foreach($dom->getElementsByTagName('code') as $node) { 
    if($node->getAttribute('xml:lang') === 'en') { 
     echo $node->nodeValue; 
    } 
} 
1

Gracias. utilizo este método:

$XMLObj = new SimpleXMLElement($XML); 
print_r($XMLObj->xpath('/answer/describe/data/code[@xml:lang = "en"]')); 
+0

Cosas buenas. Bienvenido a la pila :) – Oleg

5

XPath tiene una construcción especial para tratar con atributo 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]; 

P. S. saludos a la Sirena;)