/**
* DOMXML函數筆記
* 連接php_domxml.dll後
* 用get_defined_functions()得到domxml支援函數
*
* 目前domxml不支援非iso-8859-1以外的語言宣告
* 支援
* 不支援
* 因此需要改造成這樣,可能需要
* utf8_encode() utf8_decode() 函數進行處理
*
* 函數列表
* string domxml_version(🎜>* 函數列表
* string domxml_version(🎜> . domxml的版本號碼
* object xmldoc(string str) 從字串建立XML的Domdocument物件
* object xmldocfile(string filename) xml文檔,返回樹狀結構,不能用domxml函數改變
* resource domxml_add_root(resource doc,string name) 添加根節點
* string domxml_dumpmem(resource doc) 將domxml物件轉換為XMLML。這個函數有一個問題,他會在第一個漢字前面加上一個擴展ascii字符,形如nnn;
* domxml_node_attributes
* domxml_elem_get_attribute
* domxml_elem_set_attribchild ==no_obect*_objnm_set_attrib |node) 回傳子節點
* domxml_node_new_child
* object domxml_node(string name) 建立一個節點節點
* domxml_node_unlink_node object domxml_new_xmldoc(string version) 建立新的空XML物件
* xpath_new_context
* xpath_eval
* xpath_eval_expression
* xptr_ptr_obptr_ob_object 返回根節點
* array domxml_attributes(resource note) 取得節點屬性
* object domxml_get_attribute(resource doc,string name) 讀取屬性
* domxml_getattr* domxml_setattr
* array domxml_children(object doc|node) 回傳子節點
* resource domxml_new_child(string name,string content) >* new_xmldoc
*
*/
?>
<br><?php <br>// 文檔xml來源樹.xml 內容<br>$testxml = ' <br><?xml version="1.0" encoding="GB2312"?> <br><root><br><note>讀取xml文件時,處理器將形成一個樹,我們稱之為來源樹。該樹具有表中的各種類型的節點。 <br></note><br><title>源樹具有的節點</title>
<br><table>
<br><tr>
<th>節點型別</th>
<th>說明</th>
</tr>
<br><tr>
<td>Root(根)</td>
<td>這是樹的根節點。可以出現在樹的任何地方。根節點只具有一個子節點,子節點指的是xml文檔中的文檔元素節點。 </td>
</tr>
<br><tr>
<td>Element(元素)</td>
<td>這種節點用於文件中的任何元素。元素節點的子節點可以是其內容的元素節點、註解節點、處理資訊節點、文字節點。 </td>
</tr>
<br><tr>
<td>Text(文本)</td>
<td>文件中出現的所有文本,都分組歸入到文本節點中。文字節點不可以有同為文本節點的緊接著的前後的兄弟節點。 </td>
</tr>
<br><tr>
<td>Attribute(屬性)</td>
<td>每個元素節點都有一套自己附加的屬性節點。預設的屬性值以與指定屬性一樣的方法來處理。這些節點都沒有子節點。 </td>
</tr>
<br><tr>
<td>Namespace(name)</td>
<td>對於每一個以xlmns:和屬性節點開頭的元素,都有一個名稱空格節點。這些節點沒有子節點。 </td>
</tr>
<br><tr>
<td>Processing Instruction(處理指令)</td>
<td>每一個處理指令都有一個單獨的節點。這些節點都沒有子節點。 </td>
</tr>
<br><tr>
<td>Comment(註)</td>
<td>每一個都有一個註解節點。這些節點都沒有子節點。</td>
</tr>
<br>
</table>
<br></root><br>';<br><br>echo "domxml版本:".domxml_version();<br>echo "
";
// xmltree domxml_dumpmem
$filename = "xml來源樹.xml";
//$filename = "resume.xml";
$fp = fopen ($filename,"r");
$inXML = fread($fp,filesize($filename));
fclose($fp);
// 刪除語言設定
// $inXML = str_replace(' encoding="GB2312"',"",$inXML);
$inXML = eregi_replace(' encoding="[a-z0-9_-] "',"",$inXML);
$doc = xmltree($inXML); // 使用xmltree解析
$myxml = $doc->dumpmem(); // 轉換成字串,頭為 xml version="1.0"
為] ;'," ",$myxml); // 刪除
echo "用xmltree解析
";
echo "
";
//print_r($doc); // 可以看到整個樹亦可用var_dump($doc);
// xmldoc
$doc = xmldoc($inXML);
$myxml = $doc->dumpmem();
echo "用xmldoc解析
";
echo "
";
/ /print_r($doc); // 只能看到根節點
// domxml_new_xmldoc
$doc = domxml_new_xmldoc("1.0");
$root = $doc-> add_root("HTML");
$head = $root->new_child("HEAD", "");
$head->new_child("TITLE", "DOMXML 測試0");
$head->new_child("TITLE", "DOMXML 測試1");
$head->set_attribute("Language", "ge");
domxml_node_set_content($head,"ppp"); //設定節點的內容,多次執行是疊加的
domxml_node_set_content($head,"ttt");
// 是乎函數名稱中只有1-2個"_"的函數,可作為物件的方法使用
$myxml = $doc->dumpmem();
echo "自訂xml
";
echo "
";
// 節點的遍歷
/**
節點結構
DomElement Object
type = 1
tagname = 節點名稱
DomText Object type = 4
content = 節內容點
DomProcessingInstruction Object
type 無
*/
$ar[] = $doc->root(); // 取得根節點
$ar[] = $ar[count($ar)-1]->children();
$ar[] = $ar[count($ar)-1][0]- >children();
// 函數domxml_children() 不能傳回節點參數
// 傳回節點參數需要使用domxml_attributes()
//var_dump(domxml_attributes($head));
//var_dump(domxml_attributes($head));
//print_r($ar[1][0]->attributes());
//print_r($ar);
function xml_dumpmem($xmldoc) {
= 0;
$xmlstr = "";
// 取得節點,儲存於陣列中
if(get_class($xmldoc) == "DomDocument") {
xml version="1.0" encoding="gb2312"?>'."n";
if(count($xmldoc->children) == 1) // ] = $xmldoc->root();
else
$docs = $xml->children(); // 根節點,有其他成員
doc } ->children(); // 一般節點
}
// echo __LINE__."
";
foreach($doc as $doc) {
doc->attributes();
switch($doc->type) {
case 1:
if($attr) {
foreach($attr as $key)
$p. .= " > }
$xmlstr .= ">"; // 標籤結束
$xmlstr .= xml_dumpmem($); ->tagname} >"; // 閉合標籤
break;
case 3:
> case 4:
$xmlstr .= " $xmlstr .= $doc->content;
$xml 🎜> if(get_class ($doc) == "DomProcessingInstruction") {
$xmlstr .= "{$doc->target}";
}
break;
}
$filename = "resume.xml" ;
// $filename = "resume.xsl";
$filename = "xml來源樹.xml";
$fp = fopen($filename,"r");
$fp = fopen($filename,"r");
$fp = fopen($filename,"r");
$inXML = fread($fp,filesize($filename));
fclose($fp);
$inXML = eregi_replace(' encoding="[a-z0-9_-] "',"",$inXML );
// $doc = xmltree($inXML); // 利用xmltree解析
$doc = xmldoc($inXML); // 利用xml為
}
>
$myxml = xml_dumpmem($doc);
echo "自己寫一個dumpmem就不出錯了
";
echo "
";
print_r($doc);
?>
http://www.bkjia.com/PHPjc/313922.html
www.bkjia.com
true
http: //www.bkjia.com/PHPjc/313922.html
TechArticle
?php /** * DOMXML函數筆記* 連線php_domxml.dll後* 用get_defined_functions()得到支援* * 目前domxml不支援非iso-8859-1以外的語言聲明* ?xml vers...