2016-09-14 86 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); 
    } 
}