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(';','\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;