源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

DOMXML函数笔记

  • 时间:2022-11-16 08:24 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要: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>
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部