PHP教程-PHP XML-DOMXML函数笔记-快阅教程
?>
// 文档 xml源树.xml 内容 $testxml = ‘
读取xml文档时,处理器将形成一个树,我们将其叫做源树。该树具有表中的各种类型的节点。
源树具有的节点
| 节点类型 | 说明 |
|---|
| Root(根) | 这是树的根节点。可以出现在树的任何地方。根节点只具有一个子节点,子节点指的是xml文档中的文档元素节点。 |
| Element(元素) | 这种节点用于文档中的任何元素。元素节点的子节点可以是其内容的元素节点、注释节点、处理信息节点以及文本节点。 |
| Text(文本) | 文档中出现的所有文本,都分组归入到文本节点中。文本节点不可以有同为文本节点的紧接着的前或后的兄弟节点。 |
| Attribute(属性) | 每一个元素节点都有一套自己附加的属性节点。默认的属性值以与指定属性一样的方法来处理。这些节点都没有子节点。 |
| Namespace(名称) | 对于每一个以xlmns:和属性节点开头的元素,都有一个名称空格节点。这些节点没有子节点。 |
| Processing Instruction(处理指令) | 每一个处理指令都有一个单独的节点。这些节点都没有子节点。 |
| Comment(注释) | 每一个都有一个注释节点。这些节点都没有子节点。 |
‘;
echo "domxml版本:".domxml_version(); 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_-] "‘,"",$in="_blank" class="keylink">XML);
$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解析 "; 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 " ";
// 节点的遍历
$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 = ‘‘."n"; if(count($xmldoc->children) == 1) // 根节点,没有其他成员 $docs[] = $xmldoc->root(); else $docs = $xmldoc->children(); // 根节点,有其他成员 }else { $docs = $xmldoc->children(); // 一般节点 }
// echo __LINE__." "; 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 .= "$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就不出错了 "; echo " "; print_r($doc);
?>
|