XML--xpath解析,自制詞典

怎麼做詞典.xml之前已經寫過了

自己先弄的簡單版

<?xml version="1.0" encoding="utf-8"?>
<dict><word><name>cat</name><mean>貓</mean><eg>l have a cat.</eg></word><word><name>dog</name><mean>狗</mean></word><word><name>park</name><mean>公園</mean></word><word><name>today</name><mean>今天</mean></word><word><name>tree</name><mean>樹</mean></word><eg>例句例句</eg></dict>


html簡單查詢 就輸入英文點提交就行

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>在線詞典</title>
</head>
<body>
	<form method="post" action="8finddict.php">
		單詞<input type="text" name="danci">
		<input type="submit"> 
	</form>
</body>
</html>


分爲沒有xpath的普通解析

xpath解析


<?php
/*解析xml
快速查找xml 單詞 xpath*/
$word=$_POST['danci'];

$xml=new DOMDocument('1.0','utf-8');
$xml->load('./dict.xml');


// 普通解析
// 得到所有的name,再與你輸入的進行對比
/*
$namelist=$xml->getElementsByTagName('name');

foreach ($namelist as $k => $v) {
	// print_r($v);
	if($v->nodeValue == $word){
		echo $word,'<br />';
		echo '意思:',$v->nextSibling->nodeValue,'<br />';
		echo '例句:',$v->nextSibling->nextSibling->nodeValue,'<br />';
		break;
 	}
}
*/



//快速解析xpath
$xpath=new DOMXPATH($xml);
/*
$path='/dict/word/name';
$rs=$xpath->query($path);
// nodelist length 5 ,5個單詞
 print_r($rs);

// 第一個 name domelement
print_r($rs->item(0));

// 第2個name nodevalue
print_r($rs->item(1)->nodeValue);
*/


/*
// 第二個單詞的name
$path='/dict/word[2]/name';
//最後一個
//$path='/dict/word[last()]/name';
$rs=$xpath->query($path);
print_r($rs->item(0)->nodeValue);

// 找name是dog的mean
$path='/dict/word[name="dog"]/mean';
$rs=$xpath->query($path);
print_r($rs->item(0)->nodeValue);
*/



//不考慮層次找節點
// 第二個eg,不在word裏,但也找得到;/x//xx前面限定祖先也可
/*$path='//eg';
$rs=$xpath->query($path);
print_r($rs->item(1)->nodeValue);
*/



// 最後詞典來一發
$path='/dict/word[name="'.$word.'"]/name';
$rs=$xpath->query($path);
if ($rs->length==0) {
	echo "sorry";
	exit;
}
$rs=$rs->item(0);

	echo $word,'<br />';
	echo '意思:',$rs->nextSibling->nodeValue,'<br />';
	echo '例句:',$rs->nextSibling->nextSibling->nodeValue,'<br />';




?>



html也可以xpath

// html xpath解析
	$path='html/body/div[@id="name"]';
	// 屬性要加@


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章