2016-09-14 89 views
1

我们有一个XML字典文件是这样的:词典通过XML文件

<?xml version="1.0" encoding="UTF-8"?> 
<words> 
    <word> 
     <phrase lang="IR">حسابدار</phrase> 
     <phrase lang="FR">Comptable</phrase> 
     <phrase lang="CN">会计</phrase> 
     <phrase lang="US">Accountant</phrase> 
    </word> 
    <word> 
     <phrase lang="IR">حسابرس</phrase> 
     <phrase lang="FR">Auditeur</phrase> 
     <phrase lang="CN">核数师</phrase> 
     <phrase lang="US">Auditor</phrase> 
    </word> 
    <word> 
     <phrase lang="IR">مهندس</phrase> 
     <phrase lang="FR">Ingénieur</phrase> 
     <phrase lang="CN">工程师</phrase> 
     <phrase lang="US">Engineer</phrase> 
    </word> 
</words> 

我们需要一个PHP代码,发现含有“ginee”(工程师)的文本,并返回法国翻译(INGENIEUR)。

我们的PHP代码

<?php 
$xml = simplexml_load_file("test.xml"); 
$nodes = $xml->xpath('//word/phrase[contains(..,"ngin")]'); 
var_dump($nodes); 
?> 

,并返回

array(4) { [0]=> object(SimpleXMLElement)#2 (2) { ["@attributes"]=> array(1) { ["lang"]=> string(2) "IR" } [0]=> string(10) "مهندس" } [1]=> object(SimpleXMLElement)#3 (2) { ["@attributes"]=> array(1) { ["lang"]=> string(2) "FR" } [0]=> string(10) "Ingénieur" } [2]=> object(SimpleXMLElement)#4 (2) { ["@attributes"]=> array(1) { ["lang"]=> string(2) "CN" } [0]=> string(9) "工程师" } [3]=> object(SimpleXMLElement)#5 (2) { ["@attributes"]=> array(1) { ["lang"]=> string(2) "US" } [0]=> string(8) "Engineer" } } 
+2

*“我们需要一个PHP代码” *一类...那么它的由你来编写代码,这不是一个代码写入服务。请显示您尝试过的不起作用,然后您应该得到很多帮助。否则,如果到目前为止您什么也没有,那么您需要做一些调查研究,并在您确实有一些代码后再回来。 – charlietfl

+0

谢谢您的TRY!你的警告线超过我们所需的代码! –

回答

1

既然你已经得到了你从你使用的查询需要的节点,只需访问使用->attributes()属性(法国FR) :

基本思路:

$nodes = $xml->xpath('//word/phrase[contains(..,"ngin")]'); 
$lang_needed = 'FR'; 
$result = ''; 
if(!empty($nodes)) { 
    foreach($nodes as $node) { 
     if((string) $node->attributes()->lang === $lang_needed) { 
      // $result = (string) $node; 
      echo $node; 
     } 
    } 
} 

你也可以设计出您的查询是这样的:

$lang_needed = 'FR'; 
$nodes = $xml->xpath("//word/phrase[contains(..,'A')][@lang = '{$lang_needed}']"); 
if(!empty($nodes as $node)) { 
    // $result = (string) $node; 
    echo $node; 
} 
-1

这是解析XML成为结构

class Simple_Parser 
{ 
    var $parser; 
    var $error_code; 
    var $error_string; 
    var $current_line; 
    var $current_column; 
    var $data = array(); 
    var $datas = array(); 

    function parse($data) 
    { 

     $this->parser = xml_parser_create('UTF-8'); 
     //UTF-8 encoding geoffers_ 
     xml_set_object($this->parser, $this); 
     xml_parser_set_option($this->parser, XML_OPTION_SKIP_WHITE, 1); 
     xml_set_element_handler($this->parser, 'tag_open', 'tag_close'); 
     xml_set_character_data_handler($this->parser, 'cdata'); 
     if (!xml_parse($this->parser, $data)) 
     { 
      $this->data = array(); 
      $this->error_code = xml_get_error_code($this->parser); 
      $this->error_string = xml_error_string($this->error_code); 
      $this->current_line = xml_get_current_line_number($this->parser); 
      $this->current_column = xml_get_current_column_number($this->parser); 
     } 
     else 
     { 
      $this->data = $this->data['child']; 
     } 
     xml_parser_free($this->parser); 
    } 

    function tag_open($parser, $tag, $attribs) 
    { 
     $this->data['child'][$tag][] = array('data' => '', 'attribs' => $attribs, 'child' => array()); 
     $this->datas[] =& $this->data; 
     $this->data =& $this->data['child'][$tag][count($this->data['child'][$tag])-1]; 
    } 

    function cdata($parser, $cdata) 
    { 
     $this->data['data'] .= $cdata; 
    } 

    function tag_close($parser, $tag) 
    { 
     $this->data =& $this->datas[count($this->datas)-1]; 
     array_pop($this->datas); 
    } 
}