PHP头条
热点:

移除子节点

使用removeChild方法从DOM树中移除子节点。

DOMNode DOMNode::removeChild(DOMNode $oldnode):这个函数移除一个子节点,$oldnode参数指出要移除的子节点。下面的示例代码从Book.xml文档中移除子 节点,从图5中显示的输出内容可以看到bibliography节点消失了。

移除节点

图- 5 移除节点:移除最后一个子节点<bibliography>后,重新列出了节点的名称值,显示节点确实被移除了

替换节点

为了用一个新节点替换已有的节点,使用replaceChild方法。

DOMNode DOMNode::replaceChild(DOMNode $newnode, DOMNode $oldnode):这个函数使用$newnode子节点替换$oldnode节点。

例如,假设你想用新的code子节点替换ISBN子节点:

  1. //获取ISBN节点  
  2. $element = $dom->getElementsByTagName('ISBN')->item(0);   
  3. //创建新的<code>元素   
  4. $code = $dom->createElement('code', '909090');  
  5. //调用replacingNode函数   
  6. replacingNode($code,$element);  
  7. //这个函数使用$node替换$currentNode   
  8. function replacingNode($currentNode, $node)  
  9. {  
  10.    $node->parentNode->replaceChild($currentNode, $node);     

替换节点

图6中显示的输出内容表明节点被替换了

图- 6 替换节点:这里显示的是用新的<code>节点替换<ISBN>节点后的文档内容

导入节点

使用importNode方法从另一个树拷贝一个节点到当前的树。

DOMNode DOMDocument::importNode(DOMNode $importedNode [,bool $deep]):这个方法从另一个XML文档导入一个节点,然后插入当前文档的DOM树中, $importedNode参数指出了要导入的节点,导入的节点表示原始节点的一份拷贝,因此导入操作不会修改外部树,$deep参数控制是否导入被导入节点的深度,值为 TRUE时,导入完整的节点子树,为FALSE时,只导入节点本身。

下面的示例从Book_continue.xml文件导入<continue>节点到Book.xml,下面是Book_continue.xml文档的内容:

  1. <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
  2. <!--chapter V--> 
  3. <continue> 
  4.   <chapter_V> 
  5.    <title>XPath</title> 
  6.    <content>XPath is language for...</content> 
  7.   </chapter_V> 
  8.   <![CDATA[  
  9.      This chaper is a bonus to...  
  10.      ]]> 
  11.   <printing cap_I="click_here_for_chapter_I"   
  12.     cap_II="click_here_for_chapter_II"     
  13.     cap_III="click_here_for_chapter_III" 
  14.     cap_IV="click_here_for_chapter_IV"   
  15.     cap_V="click_here_for_chapter_V" /> 
  16. </continue> 
  17. 下面是导入<continue>节点的代码:  
  18. <?php 
  19. $olddoc = new DOMDocument;  
  20. $olddoc->load("Book_continue.xml");  
  21. //我想导入到一个新文档的节点  
  22. $node = $olddoc->getElementsByTagName("continue")->item(0);  
  23. $newnewdoc = new DOMDocument;  
  24. $newdoc->formatOutput = true;  
  25. $newdoc->load("Book.xml");  
  26. //导入节点及其所有子节点到文档  
  27. $node = $newdoc->importNode($node, true);  
  28. //然后追加到根节点  
  29. $newdoc->documentElement->appendChild($node);  
  30. echo "\nThe 'new document' after copying the nodes into it:\n";  
  31. $root = $newdoc->firstChild;  
  32. function getNodesInfo($node)  
  33. {  
  34.    if ($node->hasChildNodes())  
  35.    {  
  36.       $subNodes = $node->childNodes;  
  37.       foreach ($subNodes as $subNode)  
  38.       {  
  39.          if (($subNode->nodeType != 3) ||   
  40.             (($subNode->nodeType ==3) &&  
  41.             (strlen(trim($subNode->wholeText))>=1)))     
  42.          {  
  43.          echo "Node name: ".$subNode->nodeName."\n";  
  44.          echo "Node value: ".$subNode->nodeValue."\n";  
  45.       }  
  46.       getNodesInfo($subNode);           
  47.       }  
  48.    }        
  49. }  
  50. getNodesInfo($root);     
  51. ?> 

导入节点

图7显示前面代码的输出

图- 7 导入节点:这里显示了从Book_continue.xml导入节点并追加到Book.xml后的样子

检查节点的等同性

检查两个节点是否相同使用isSameNode方法。

bool DOMNode::isSameNode(DOMNode $node):当节点是相等的时候,这个函数返回一个布尔值TRUE,否则返回FALSE,$node参数表示你要和当前节点进行比较 的节点。

注意比较不是基于节点的内容进行的:

  1. //检查两个节点是否相同  
  2. $author1 = $root->getElementsByTagName('autor')->item(0);  
  3. $author2 = $root->getElementsByTagName('autor')->item(1);  
  4. //调用verifyNodes函数  
  5. verifyNodes($author1,$author2);  
  6. function verifyNodes($currentNode, $node)  
  7. {  
  8.    if (($currentNode->isSameNode($node))==true)  
  9.    {  
  10.       echo "These two nodes are the same";  
  11.    }     

创建新的树

PHP 5 DOM扩展可以让你从零开始构建DOM树,下面的示例创建了一个全新的XML文档,使用了两个新函数创建注释和CDATA节点。

1、DOMComment DOMDocument::createComment(string $data):创建一个新的注释节点,$data参数表示节点的内容。

2、DOMCDATASection DOMDocument::createCDATASection(string $data):创建一个新的CDATA节点,$data参数表示节点的内容。

  1. <?php   
  2.   //创建一个文档实例   
  3.   $document = new DOMDocument();  
  4.   //使用缩进格式化输出  
  5.   $document->formatOutput = true;  
  6.   //创建一个注释  
  7.   $comment = $document->createComment('Beautiful flowers!!!');  
  8.   $document->appendChild( $comment );   
  9.   //创建<flowers>根元素   
  10.   $root = $document->createElement( 'flowers' );  
  11.   $document->appendChild( $root );  
  12.   //创建<tulips>子节点  
  13.   $tulips = $document->createElement( 'tulips' );  
  14.   //创建<tulips>元素的第一个子节点<bulbs>,并设置其属性  
  15.    $bulbs_1 = $document->createElement( 'bulbs' );     
  16.   $bulbs_1->setAttribute('price','€ 7.65');  
  17.   $bulbs_1->appendChild($document->createTextNode( 'Parrot'));  
  18.   $tulips->appendChild( $bulbs_1 );  
  19.   //创建<tulips>元素的第二个子节点<bulbs>,并设置其属性  
  20.   $bulbs_2 = $document->createElement( 'bulbs' );      
  21.   $bulbs_2->setAttribute('color','magenta');  
  22.   $bulbs_2->appendChild($document->createTextNode( 'Lily flowering' ));  
  23.   $tulips->appendChild( $bulbs_2 );  
  24.   //追加<tulips>节点到根节点后  
  25.   $root->appendChild( $tulips );  
  26.   //创建CDATA小节  
  27.   $cdata = $document->createCDATASection(  
  28.     '<gladiolus><species>Sword Lily</species>'.  
  29.     '<species>Starface</species></gladiolus>');  
  30.   $document->appendChild( $cdata );   
  31.   //保存对象树到Flowers.xml   
  32.   echo $document->saveXML();  
  33.   $document->save('Flowers.xml');  
  34. ?> 
  35. 新的Flower.xml文档内容如下:  
  36. <?xml version="1.0" encoding="ISO-8859-1"?> 
  37. <!--Beautiful flowers!!!--> 
  38. <flowers> 
  39.   <tulips> 
  40.     <bulbs price="€ 7.65">Parrot</bulbs> 
  41.     <bulbs color="magenta">Lily flowering</bulbs> 
  42.   </tulips> 
  43. </flowers> 
  44. <![CDATA [<gladiolus>  
  45.     <species>Sword Lily</species>  
  46.     <species>Starface</species>  
  47.   </gladiolus>  
  48. ]]> 

清单2中的代码创建了一个对象树,并将其保存为Flowers.xml。

清单2 创建一个新的DOM树

本文简单介绍了PHP 5 DOM扩展,并介绍如何使用它操作XML或HTML)文档,以及如何从零创建一个DOM树。

  1. 国外优秀开源PHP建站程序一览
  2. PHP 5.3:远大于开发者预期的重大版本
  3. PHPnow1.5.3下载 - 绿色PHP环境包
  4. 浅谈如何搭建IIS+PHP+JSP+MySQL环境
  5. 开发老手谈Windows平台的PHP应用开发


www.phpzy.comtrue/php/17651.htmlTechArticle移除子节点 使用removeChild方法从DOM树中移除子节点。 DOMNode DOMNode::removeChild(DOMNode $oldnode):这个函数移除一个子节点,$oldnode参数指出要移除的子节点。下...

相关文章

    暂无相关文章

PHP之友评论

今天推荐