<?php
/**
* DOMXML函數筆記
* 連接php_domxml.dll后
* 用get_defined_functions()得到domxml支持函數
*
* 目前domxml不支持非iso-8859-1以外的語言聲明
* <?xml version="1.0" enco " /> 欧美黑大炮18p,蜜桃狠狠色伊人亚洲综合网站,51精品国产AV无码久久久

天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

DOMXML函數筆記


<?php
/**
* DOMXML函數筆記
* 連接php_domxml.dll后
* 用get_defined_functions()得到domxml支持函數
*
* 目前domxml不支持非iso-8859-1以外的語言聲明
* <?xml version="1.0" encoding="iso-8859-1"?> 支持
* <?xml version="1.0" encoding="gb2312"?> 不支持
* <?xml version="1.0"?> 因此需要改造成這樣,可能需要
* utf8_encode() utf8_decode() 函數進行處理
*
* 函數列表
* string domxml_version(void)  返回domxml的版本號
* object xmldoc(string str)    從字符串創建XML的Domdocument對象
* object xmldocfile(string filename)   從文件創建XML的Domdocument對象
* object xmltree(string str)   解析xml文檔,返回樹狀結構,不能用domxml函數改變
* resource domxml_add_root(resource doc,string name)  添加根節點
* string domxml_dumpmem(resource doc)  將domxml對象轉化為XML串。這個函數有一個問題,他會在第一個漢字前面加一個擴展ascii字符,形如&#nnn;
* domxml_node_attributes
* domxml_elem_get_attribute
* domxml_elem_set_attribute
* array domxml_node_children(object doc|node)  返回子節點
* domxml_node_new_child
* object domxml_node(string name)  創建一個節點節點
* domxml_node_unlink_node
* int domxml_node_set_content(resource doc,string content)  設置節點內容
* object domxml_new_xmldoc(string version)  創建新的空XML對象
* xpath_new_context
* xpath_eval
* xpath_eval_expression
* xptr_new_context
* xptr_eval
* object domxml_root(object doc)  返回根節點
* array domxml_attributes(resource note)  獲取節點屬性
* object domxml_get_attribute(resource doc,string name)  讀取屬性
* domxml_getattr
* object domxml_set_attribute(resource doc,string name,string value)  添加屬性
* domxml_setattr
* array domxml_children(object doc|node)  返回子節點
* resource domxml_new_child(string name,string content)  添加子節點
* domxml_unlink_node
* set_content
* new_xmldoc
*
*/
?>
<pre>
<?php
// 文檔 xml源樹.xml 內容
$testxml = '
<?xml version="1.0" encoding="GB2312"?>
<root>
<note>讀取xml文檔時,處理器將形成一個樹,我們將其叫做源樹。該樹具有表中的各種類型的節點。
</note>
<title>源樹具有的節點</title>
<table>
<tr><th>節點類型</th><th>說明</th></tr>
<tr><td>Root(根)</td><td>這是樹的根節點。可以出現在樹的任何地方。根節點只具有一個子節點,子節點指的是xml文檔中的文檔元素節點。</td></tr>
<tr><td>Element(元素)</td><td>這種節點用于文檔中的任何元素。元素節點的子節點可以是其內容的元素節點、注釋節點、處理信息節點以及文本節點。</td></tr>
<tr><td>Text(文本)</td><td>文檔中出現的所有文本,都分組歸入到文本節點中。文本節點不可以有同為文本節點的緊接著的前或后的兄弟節點。</td></tr>
<tr><td>Attribute(屬性)</td><td>每一個元素節點都有一套自己附加的屬性節點。默認的屬性值以與指定屬性一樣的方法來處理。這些節點都沒有子節點。</td></tr>
<tr><td>Namespace(名稱)</td><td>對于每一個以xlmns:和屬性節點開頭的元素,都有一個名稱空格節點。這些節點沒有子節點。</td></tr>
<tr><td>Processing Instruction(處理指令)</td><td>每一個處理指令都有一個單獨的節點。這些節點都沒有子節點。</td></tr>
<tr><td>Comment(注釋)</td><td>每一個都有一個注釋節點。這些節點都沒有子節點。</td></tr>
</table>
</root>
';

echo "domxml版本:".domxml_version();
echo "<p>  </p>";
// 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"
                           // 如果再執行一次,頭將變成  xml version="1.0" encoding="ISO-8859-1"
//$myxml = eregi_replace('&#[0-9]+;',"",$myxml); // 刪除
echo "用xmltree解析<br>";
echo "<textarea cols=60 rows=5>$myxml</textarea><br>";
//print_r($doc);  // 可以看到整個樹 亦可用var_dump($doc);

// xmldoc
$doc = xmldoc($inXML);
$myxml = $doc->dumpmem();
echo "用xmldoc解析<br>";
echo "<textarea cols=60 rows=5>$myxml</textarea><br>";
//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<br>";
echo "<textarea cols=60 rows=5>$myxml</textarea><br>";

// 節點的遍歷
/**
  節點結構
  DomElement Object
    type = 1
    tagname = 節點名
  DomText Object
    type = 3
    content = 節內容點
  DomCData Object
    type = 4
    content = 節內容點

  DomProcessingInstruction Object
    type 無
    target = 處理指令
    data = 參數

*/
$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));
//print_r($ar[1][0]->attributes());
//print_r($ar);

function xml_dumpmem($xmldoc) {
  static $mode = 0;
  $xmlstr = "";
  // 獲取節點,保存在數組中
  if(get_class($xmldoc) == "DomDocument") {
    $xmlstr = '<?xml version="1.0" encoding="gb2312"?>'."/n";
    if(count($xmldoc->children) == 1)  // 根節點,沒有其他成員
      $docs[] = $xmldoc->root();
    else
      $docs = $xmldoc->children();  // 根節點,有其他成員
  }else {
    $docs = $xmldoc->children();  // 一般節點
  }

//  echo __LINE__."<br>";
  foreach($docs as $doc) {
    $attr = $doc->attributes();
    switch($doc->type) {
      case 1:
        $xmlstr .= "<{$doc->tagname}";  // 標簽頭
        if($attr) {
          foreach($attr as $key)
            $xmlstr .= " {$key->name}=/"{$key->value}/"";  // 標簽參數
        }
        $xmlstr .= ">";  // 標簽結束
        $xmlstr .= xml_dumpmem($doc);  // 進入子節點
        $xmlstr .= "</{$doc->tagname}>";  // 閉合標簽
        break;
      case 3:
        $xmlstr .= $doc->content;
        break;
      case 4:
        $xmlstr .= "<![CDATA][";
        $xmlstr .= $doc->content;
        $xmlstr .= "]]>";
        break;
      default:
        if(get_class($doc) == "DomProcessingInstruction") {
          $xmlstr .= "<?{$doc->target}";
          $xmlstr .= " {$doc->data}?>/n";
        }
        break;
    }
  }
  return $xmlstr;
}

if(1) {
  $filename = "resume.xml";
//  $filename = "resume.xsl";
  $filename = "xml源樹.xml";
  $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);    // 使用xmldoc解析
}

// 不能用來解析xsl文檔

$myxml = xml_dumpmem($doc);
echo "自己寫一個dumpmem就不出錯了<br>";
echo "<textarea cols=60 rows=5>$myxml</textarea><br>";
print_r($doc);

?>
</pre>

php技術DOMXML函數筆記,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 快播理伦片 | 91精品免费久久久久久久久 | 欧美在线视频一区 | 色戒床震视频片段 | 亚洲第一成年网站视频 | 国产一区二区精品视频 | 国产成人免费观看 | 日本精品卡一卡2卡3卡四卡三卡 | 亚洲欧美精品无码一区二在线 | 俄罗斯摘花| 久久er国产精品免费观看2 | 国产人在线成免费视频 | 亚洲日韩国产成网站在线 | 人人干人人插 | 亚洲 欧美 日本 国产 高清 | 中文字幕在线久热精品 | 亚洲中文久久精品AV无码 | 久草在线福利视频在线播放 | 在线视频av大全色久久 | 国产国产乱老熟视频网站 | 久久热免费观看视频 | 第一次破女视频出血视频 | 四虎永久在线精品国产免费 | 96.8在线收听 | yellow片高清视频免费看 | 快播免费电影 | 亚洲国产精品无码中文字幕 | www伊人网| 精品国产5g影院天天爽 | 少妇邻居内射在线 | a三级黄色片| 好紧好湿太硬了我太爽了小说 | 久久精品国产福利电影网 | 97无码人妻精品1国产精东影业 | 某上海少妇3P黑人完整版BD | 色欲AV亚洲永久无码精品麻豆 | 欧美日韩在线成人看片a | 男人J桶进男人屁股过程 | 久久香蕉国产线看观看精品 | 国产36d在线观看 | 色狗av影院 |