Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 基于XML文件的词典_Php_Xml_Xpath_Simplexml - Fatal编程技术网

Php 基于XML文件的词典

Php 基于XML文件的词典,php,xml,xpath,simplexml,Php,Xml,Xpath,Simplexml,我们有这样一个XML字典文件: <?xml version="1.0" encoding="UTF-8"?> <words> <word> <phrase lang="IR">حسابدار</phrase> <phrase lang="FR">Comptable</phrase> <phrase lang="CN">会计</phrase&

我们有这样一个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>

由于您已经从所使用的查询中获得了所需的节点,因此只需使用
->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;
}

由于您已经从所使用的查询中获得了所需的节点,因此只需使用
->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;
}

这是一个将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);
    }
}

这是一个将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);
    }
}

“我们需要一个PHP代码”。。。好吧,由你来编写代码,这不是一个代码编写服务。请展示你尝试过的不起作用的东西,然后你应该得到很多帮助。否则,如果你到目前为止还没有什么,那么是时候对你的部分进行一些研究,当你有一些代码时再回来谢谢你的尝试!您的警告线超出了我们需要的代码!!“我们需要一个PHP代码”。。。好吧,由你来编写代码,这不是一个代码编写服务。请展示你尝试过的不起作用的东西,然后你应该得到很多帮助。否则,如果你到目前为止还没有什么,那么是时候对你的部分进行一些研究,当你有一些代码时再回来谢谢你的尝试!您的警告线超出了我们需要的代码!!