2010-10-22 17 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> 

Potrzebuję uzyskać wartość węzłów, tam xml: lang = "en". Jak to zrobić w PHP?xml: lang parsować w PHP

Odpowiedz

4

Tak, SimpleXML działa ale spróbuj dodać xml namespace jeżeli napotkasz kłopoty.

Np .:

<?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

zostało odebrane przed:

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

Alternative bez XPath:

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

Dzięki. używać tej metody:

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

Dobre rzeczy. Witamy w stosie :) – Oleg

5

XPath ma specjalną konstrukcję postępowania z atrybut 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. pozdrowienia dla Sirena;)