日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

php如何实现读取网易有道词典输出单词的xml格式并且转化为html形式

發(fā)布時(shí)間:2025/3/21 php 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php如何实现读取网易有道词典输出单词的xml格式并且转化为html形式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

php實(shí)現(xiàn)讀取網(wǎng)易有道詞典輸出單詞的xml格式并且轉(zhuǎn)化為html形式

一、總結(jié)

一句話總結(jié):將xml中的文件用preg_match_all讀出來,然后組合成想要的數(shù)據(jù)

?

1、explode除了爆炸的意思,還有什么意思?

解答:分割、分解、打碎

2、合并一個(gè)文檔中多行為一行的方法是什么?

解答:替換,把換行符全部替換成空格。$con=str_replace(PHP_EOL,"",$con);

3、PHP正則中的多行匹配修飾符是?

解答:s。多行匹配修飾符s:$pattern="/<".$val.">.*?<\/".$val.">/s";。

4、如何解決file_put_contents函數(shù)?failed to open stream: Invalid argument的問題?

解答:把文件名從中文名改成英文名就OK了。

5、如何設(shè)置php文件的輸出到頁面的字符集?

解答:meta標(biāo)簽的charset屬性,echo '<meta charset="utf-8"/>';。

6、preg_match_all的兩個(gè)結(jié)果參數(shù)分別代表什么?

解答:?$out[0]是包含匹配完整模式的字符串的數(shù)組,?$out[1]是包含閉合標(biāo)簽內(nèi)的字符串的數(shù)組。。

7、php中explode函數(shù)的作用是什么?

解答:用一個(gè)字符串去分割另外一個(gè)。

?

?

?

二、php實(shí)現(xiàn)讀取網(wǎng)易有道詞典的xml格式輸出單詞并且轉(zhuǎn)化為html形式

正則表達(dá)式匹配多行問題:

xml中的trans標(biāo)簽,因?yàn)橛械氖嵌嘈械?#xff0c;所以用preg_match_all方法有一些匹配不到

解決策略一:去掉所有換行符

將所有行合并到一行,然后來提取,就沒有換行符的影響了,這個(gè)時(shí)候回出現(xiàn)貪婪匹配的問題,就是比如<word>prompt</word><word>prompt</word><word>prompt</word>,匹配的時(shí)候直接匹配的是第一個(gè)<word>和最后一個(gè)</word>,中間的都被弄進(jìn)去了,解決方法,優(yōu)化正則表達(dá)式

合并行:$con=str_replace(PHP_EOL,"",$con);

惰性匹配:$pattern="/<".$val.">.*?<\/".$val.">/";??preg_match_all($pattern,$con,$temp);

?

解決策略二:多行匹配,可以用正則表達(dá)式修飾符s

多行匹配修飾符s:$pattern="/<".$val.">.*?<\/".$val.">/s";??preg_match_all($pattern,$con,$temp);

?

html標(biāo)簽貪婪匹配的問題:

比如<word>prompt</word><word>prompt</word><word>prompt</word>,匹配的時(shí)候直接匹配的是第一個(gè)<word>和最后一個(gè)</word>,中間的都被弄進(jìn)去了,不同的word沒有被區(qū)別開來

解決策略一:用惰性匹配就好

惰性匹配:$pattern="/<".$val.">.*?<\/".$val.">/";??preg_match_all($pattern,$con,$temp);

?

file_put_contents函數(shù)?failed to open stream: Invalid argument的問題

解答:把文件名從中文名改成英文名就OK了

?

1、原數(shù)據(jù)形式(部分)

<wordbook><item><word>prompt</word><trans><![CDATA[adj. 敏捷的,迅速的;立刻的 vt. 提示;促進(jìn);激起;(給演員)提白 n. 提示;付款期限;DOS命令:改變DOS系統(tǒng)提示符的風(fēng)格 adv. 準(zhǔn)時(shí)地]]></trans><phonetic><![CDATA[[pr?m(p)t]]]></phonetic><tags></tags><progress>1</progress></item><item><word>expression</word><trans><![CDATA[n. 表現(xiàn),表示,表達(dá);表情,臉色,態(tài)度,腔調(diào),聲調(diào);式,符號;詞句,語句,措辭,說法]]></trans><phonetic><![CDATA[[?k'spr???n]]]></phonetic><tags></tags><progress>1</progress></item> </wordbook>

?

2、最后呈現(xiàn)形式

?

3、代碼

1 <?php 2 /** 3 * Created by PhpStorm. 4 * User: rfan 5 * Date: 31/5/2018 6 * Time: 12:29 PM 7 */ 8 echo '<meta charset="utf-8"/>'; 9 $con=file_get_contents('words.xml'); 10 11 //應(yīng)該是由于換行符的問題導(dǎo)致的trans匹配不到,那可以把所有的內(nèi)容匹配成一行就好 12 $con=str_replace(PHP_EOL,"",$con); 13 //echo $con; 14 15 16 //XML標(biāo)簽配置 17 $xmlTag=[ 18 'word', 19 'trans', 20 'phonetic', 21 'tags', 22 'progress' 23 ]; 24 $arr = array(); 25 foreach ($xmlTag as $key=>$val){ 26 //應(yīng)該是由于換行符的問題導(dǎo)致的trans匹配不到,那可以把所有的內(nèi)容匹配成一行就好 27 /***********************************未去掉換行符后的正則表達(dá)式***********************************/ 28 // $pattern='/<'.$val.'>'.'.*'.'/<\/'.$val.'>'; 29 // $pattern="/<".$val.">[^<>]*<\/".$val.">/"; 30 // $pattern="/<".$val.">.*\n*.*<\/".$val.">/"; //多行的問題只能匹配139個(gè) 31 // $pattern="/<".$val.">.*?<\/".$val.">/s"; //正確 32 /***********************************去掉換行符后的正則表達(dá)式***********************************/ 33 $pattern="/<".$val.">.*?<\/".$val.">/"; //正確 34 // echo $pattern.'</br>'; 35 preg_match_all($pattern,$con,$temp); 36 $arr[] = $temp[0]; 37 // echo '<pre>'; 38 // var_dump($temp); 39 // echo '</pre>'; 40 } 41 42 //echo '<pre>'; 43 //var_dump($arr); 44 //echo '</pre>'; 45 46 //去除XML標(biāo)簽并組裝數(shù)據(jù) 47 $data = array(); 48 foreach($arr as $key => $value) { 49 foreach($value as $k => $v) { 50 $a = explode($xmlTag[$key].'>', $v); 51 $v = substr($a[1], 0, strlen($a[1])-2); 52 $data[$k][$xmlTag[$key]] = $v; 53 } 54 } 55 56 //echo '<pre>'; 57 //var_dump($data); 58 //echo '</pre>'; 59 60 61 //清除數(shù)據(jù)里面的<![CDATA[]]> 62 foreach($data as $key=>&$val){ 63 foreach($val as $k => &$v){ 64 // echo $v.'</br>'; 65 $start="/<!\[CDATA\[/"; 66 $end="/\]\]>/"; 67 $v=preg_replace($start,"",$v); 68 $v=preg_replace($end,"",$v); 69 // echo $k.':&nbsp;&nbsp;'.$v.'</br>'; 70 } 71 } 72 73 74 //給數(shù)據(jù)添加好標(biāo)簽,然后按照自己格式輸出到文本 75 76 //文章題號開始標(biāo)記 77 $articleStart=1; 78 //每篇文章取單詞的數(shù)目 79 $selectWordNum=20; 80 //單詞索引號 81 $iii=1; 82 foreach($data as $key=>&$val){ 83 if($iii%20==1){ 84 85 if(isset($articleContent)&&!empty($articleContent)){ 86 echo $articleContent; 87 88 $fileName='commonWords/'.$pureTitle_en.'.html'; 89 file_put_contents($fileName,$articleContent); 90 } 91 $pureTitle_en='commonWords'.$articleStart; 92 $pureTitle_cn='常用單詞'.$articleStart++; 93 $title='<h1 style="text-align: center;">'.$pureTitle_cn.'</h1>'; 94 $headPart=$title.'<h2>一、總結(jié)</h2><p>&nbsp;</p><p>&nbsp;</p><h2>二、'.'測試題-簡答題'.'</h2>'; 95 $articleContent=$headPart; 96 97 98 99 } 100 //每道題目的問題 101 $pureQuestion=$val['word']."&nbsp;&nbsp;".$val['phonetic']; 102 $jj=$iii%20==0?20:$iii%20; //保證每篇文章每道題目的序號都是1-20 103 $question='<h3>'.$jj.'、'.$pureQuestion.'</h3>'; 104 //每道題目的答案 105 $pureAnswer=$val['trans']; 106 $answer='<p>'.$pureAnswer.'</p><p>&nbsp;</p><p>&nbsp;</p>'; 107 //添加每篇文章的內(nèi)容 108 $articleContent.=$question.$answer; 109 110 unset($val['tags']); 111 unset($val['progress']); 112 113 $iii++; 114 } 115 116 //如果有多的沒完的哪一篇,把多的沒完的那一篇打下來 117 if(isset($articleContent)&&!empty($articleContent)){ 118 echo $articleContent; 119 120 $fileName='commonWords/'.$pureTitle_en.'.html'; 121 file_put_contents($fileName,$articleContent); 122 } 123 124 125 126 //$str="dfafeasfasefase"; 127 //$start="/^dfa/"; 128 //$end="/ase$/"; 129 //echo $str.'</br>'; 130 //$str=preg_replace($start,"",$str); 131 //echo $str.'</br>'; 132 //$str=preg_replace($end,"",$str); 133 //echo $str.'</br>'; 134 135 //echo '<pre>'; 136 //var_dump($data); 137 //echo '</pre>'; 138 139 //按照自己格式輸出到文本 140 //$file='wordsOk.text'; 141 //file_put_contents($filet,$data);

?

三、附加

1、preg_match_all 使用實(shí)例

1 <?php 2 preg_match_all("|<[^>]+>(.*)</[^>]+>|U", 3 "<b>example: </b><div align=left>this is a test</div>", 4 $out, PREG_PATTERN_ORDER); 5 echo $out[0][0] . ", " . $out[0][1] . "\n"; 6 echo $out[1][0] . ", " . $out[1][1] . "\n"; 7 ?> 8 以上例程會輸出: 9 10 <b>example: </b>, <div align=left>this is a test</div> 11 example: , this is a test

因此,?$out[0]是包含匹配完整模式的字符串的數(shù)組,?$out[1]是包含閉合標(biāo)簽內(nèi)的字符串的數(shù)組。

?

四、測試題-簡答題

1、explode除了爆炸的意思,還有什么意思?

解答:分割、分解、打碎

2、合并一個(gè)文檔中多行為一行的方法是什么?

解答:替換,把換行符全部替換成空格。$con=str_replace(PHP_EOL,"",$con);

3、PHP正則中的多行匹配修飾符是?

解答:s。多行匹配修飾符s:$pattern="/<".$val.">.*?<\/".$val.">/s";。

4、如何解決file_put_contents函數(shù)?failed to open stream: Invalid argument的問題?

解答:把文件名從中文名改成英文名就OK了。

5、如何設(shè)置php文件的輸出到頁面的字符集?

解答:meta標(biāo)簽的charset屬性,echo '<meta charset="utf-8"/>';。

6、preg_match_all的兩個(gè)結(jié)果參數(shù)分別代表什么?

解答:?$out[0]是包含匹配完整模式的字符串的數(shù)組,?$out[1]是包含閉合標(biāo)簽內(nèi)的字符串的數(shù)組。。

7、php中explode函數(shù)的作用是什么?

解答:用一個(gè)字符串去分割另外一個(gè)。

?

?

?

?

?

?

?

?

?

?

總結(jié)

以上是生活随笔為你收集整理的php如何实现读取网易有道词典输出单词的xml格式并且转化为html形式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。