php 生成bing词典能导入的xml(有道词典->bing词典)

余生长醉 提交于 2020-02-08 14:46:32

    编程以来一直用网易有道词典查单词、翻译;最近一直在看英文方面的资料,于是越来越对有道词典(划词、广告,本来想转灵格斯的,但灵格斯没有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(';','\n'),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;

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!