首頁 >後端開發 >php教程 >DOMXML函數筆記_PHP教程

DOMXML函數筆記_PHP教程

WBOY
WBOY原創
2016-07-21 16:11:32966瀏覽


/**
* 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*_obj​​nm_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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn