Heim  >  Artikel  >  Backend-Entwicklung  >  在PHP5中使用DOM控制XML_PHP教程

在PHP5中使用DOM控制XML_PHP教程

WBOY
WBOYOriginal
2016-07-13 17:32:041115Durchsuche

php(做为现在的主流开发语言)5中增强了xml(标准化越来越近了)的支持,使用DOM扩展了xml(标准化越来越近了)操作的能耐。这些函数作为 php(做为现在的主流开发语言)5 核心的一部分,无需被安装即可使用。

下面的例子简单的演示了DOM对xml(标准化越来越近了)的操作,详细解释请看代码中的注释


/************************************************
**                    use xml(标准化越来越近了) in php(做为现在的主流开发语言)5
** reference site:
** http://cn.php(做为现在的主流开发语言).net/manual/zh/ref.dom.php(做为现在的主流开发语言)
** the follow codes need php(做为现在的主流开发语言)5 support
*************************************************/


//首先要创建一个DOMDocument对象
$dom = new DomDocument();
//然后载入xml(标准化越来越近了)文件
$dom -> load("test.xml(标准化越来越近了)");

//输出xml(标准化越来越近了)文件
//header("Content-type: text/xml(标准化越来越近了);charset=gb2312");
//echo $dom -> savexml(标准化越来越近了)();

//保存xml(标准化越来越近了)文件,返回值为int(文件大小,以字节为单位)
//$dom -> save("newfile.xml(标准化越来越近了)");

echo "


取得所有的title元素:
";
$titles = $dom -> getElementsByTagName("title");
foreach ($titles as $node)
{
  echo $node -> textContent . "
";
  //这样也可以
  //echo $node->firstChild->data . "
";
}

/*
echo "


从根结点遍历所有结点:
";
foreach ($dom->documentElement->childNodes as $items) {
  //如果节点是一个元素(nodeType == 1)并且名字是item就继续循环
  if ($items->nodeType == 1 && $items->nodeName == "item") {
    foreach ($items->childNodes as $titles) {
      //如果节点是一个元素,并且名字是title就打印它.
      if ($titles->nodeType == 1 && $titles->nodeName == "title") {
        print $titles->textContent . " ";
      }
    }
  }
}
*/

//使用XPath查询数据
echo "


使用XPath查询的title节点结果:
";
$xpath = new domxpath($dom);
$titles = $xpath->query("/rss/channel/item/title");
foreach ($titles as $node)
{
  echo $node->textContent."
";
}
/*
这样和使用getElementsByTagName()方法差不多,但是Xpath要强大的多
深入一点可能是这样:
/rss/channel/item[position() = 1]/title 返回第一个item元素的所有
/rss/channel/item/title[@id = 23] 返回所有含有id属性并且值为23的title
/rss/channel/&folder&/title 返回所有articles元素下面的title(译者注:&folder&代表目录深度)
*/


//向DOM中写入新数据
$item = $dom->createElement("item");
$title = $dom->createElement("title");
$titleText = $dom->createTextNode("title text");
$title->appendChild($titleText);
$item->appendChild($title);
$dom->documentElement->getElementsByTagName(channel)->item(0)->appendChild($item);

//从DOM中删除节点
//$dom->documentElement->RemoveChild($dom->documentElement->getElementsByTagName("channel")->item(0));
//或者使用xpath查询出节点再删除
//$dom->documentElement->RemoveChild($xpath->query("/rss/channel")->item(0));
//$dom->save("newfile.xml(标准化越来越近了)");

//从DOM中修改节点数据
//修改第一个title的文件
//这个地方比较笨,新创建一个节点,然后替换旧的节点。如果哪位朋友有其他好的方法请一定要告诉我

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/508732.htmlTechArticlephp (做为现在的主流开发语言) 5中增强了xml (标准化越来越近了) 的支持,使用DOM扩展了xml (标准化越来越近了) 操作的能耐。这些函数作为...
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn