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

पर मुझे लैंग पार्स मुझे नोड्स मान प्राप्त करने की आवश्यकता है, वहां xml: lang = "en"। PHP में यह कैसे कर सकता है?xml: PHP

उत्तर

4

हाँ, SimpleXML लेकिन xml namespace यदि आप मुसीबत में पड़ जोड़ने की कोशिश काम करता है।

उदा .:

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

PHP SAX parser decribed here पर एक नज़र डालें।

$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 बिना:

+0

xx पार्स कर सकते हैं: लैंग, SimpleXMLElement का उपयोग कर? – Sergey

+0

हां, http://www.php.net/manual/en/function.xml-parse.php – Thariama

1

से पहले उत्तर दिया गया है

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

धन्यवाद। 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]; 

पी.एस.

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

अच्छी सामग्री देखें। ढेर में आपका स्वागत है :) – Oleg

5

XPath एक्सएमएल से निपटने के लिए एक विशेष निर्माण किया है: मैं इस विधि का उपयोग सिरेना को बधाई;)