zoukankan      html  css  js  c++  java
  • php 生成bing词典能导入的xml(有道词典->bing词典)

        编程以来一直用网易有道词典查单词、翻译;最近一直在看英文方面的资料,于是越来越对有道词典(划词、广告,本来想转灵格斯的,但灵格斯没有android版)不满意,一番试用后决定转bing词典,于是想把有道单词本里的单词导出

    再导入bing词典,但操作后才发现有道词典导出的xml和bing词典的xml格式和节点不一样,但我执意要换为bing词典,没办法只好自己自己动手写一个php将有道的xml转为bing词典能导入的xml。

    数组转xml是在网上找的,虽然简单,但功能还行。

    下面是代码:

    <?php
    // 有道词典xml 转为bing词典可以导入的xml 
    
    /**
     * 把数组转化为xml,数字索引只支持一维,数字索引和字符索引不能混合
     *
     * @param array $array
     * @return string
     */
    function arrayToXML($array)
    {
        $str_xml = "";
        if (is_array($array) && !empty($array)) {
            $has_number_key = false;
            foreach ($array as $key => $value) {
                $parent_key = @func_get_arg(2);
                if (is_integer($key)) {
                    $has_number_key = true;
                    if (is_integer($parent_key)) {
                        throw new Exception('数字索引只支持一维');
                    }
                    if (empty($parent_key)) {
                        $parent_key = $key;
                    } else {
                        if ($parent_key{strlen($parent_key) - 1} == 's') {
                            $parent_key = substr($parent_key, 0, strlen($parent_key) - 1);
                        }
                    }
                    $str_xml .= "<$parent_key>" . arrayToXML($value,$key, $parent_key) . "</$parent_key>";
                } else {
                    if ($has_number_key) {
                        throw new Exception('数字索引和字符索引不能混合');
                    }
    
                    $parent_key = $key;
                    $str_xml .= "<$key>" . arrayToXML($value,$key, $parent_key) . "</$key>";
                }
            }
        } else {
            $key = func_get_arg(1);
            if (strpos($array, '<') !== false) {
                return '<![CDATA[' . $array . ']]>';
            }
            if (is_array($array) && empty($array)) {
                return '';
            }
            return $array ;
        }
        return $str_xml;
    }
    
    
    $xmlObject = simplexml_load_file("youdao.xml");
    $item = $xmlObject->item;
    $datas = array();
    for($i=0;$i<$item->count();$i++){
        $trans = trim(strval($item[$i]->trans));
        if(!empty($trans)){
            //去除没有解释的单词、否则导入bing词典报错
            $datas['Phrases'][$i]['Eng']= strval($item[$i]->word);//读取xml每项值
            $datas['Phrases'][$i]['Phonetic']= strval($item[$i]->phonetic); 
            $datas['Phrases'][$i]['Defi']= str_replace(array(';','
    '),array(';',''),strval($item[$i]->trans)); //中文分号替换
            $datas['Phrases'][$i]['Date']= date("Y-m-d H:i:s");
        }
    }
    //构建xml
    $xml  = '<?xml version="1.0"?><FCVocaPhraseList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">';
    $xml .= arrayToXML($datas);
    $xml .= '</FCVocaPhraseList>';
    header('Content-Type: text/xml');
    echo $xml;
  • 相关阅读:
    Solr学习笔记(2) —— Solr管理索引库
    Solr学习笔记(1) —— Solr概述&Solr的安装
    Linux软件安装
    Redis学习笔记(5)—— Redis的持久化方案&Redis的集群搭建
    Redis学习笔记(3)—— 五种数据类型&keys的通用操作
    Redis学习笔记(4)—— Jedis入门
    Redis学习笔记(2)—— Redis的安装和使用
    Redis学习笔记(1)—— NoSQL&Redis简介
    FastDFS
    Nginx
  • 原文地址:https://www.cnblogs.com/keygle/p/3315998.html
Copyright © 2011-2022 走看看