这样呢?
$dom new DomDocument("1.0");

解决方案 »

  1.   

    可能需要楼主帖出部分代码吧,
    还有就是楼主用的php版本以及运行环境。php5内置了dom函数,不需要在php.ini里添加php_domxml.dll
      

  2.   


    <?php
    /************************************************
    **                    use XML in PHP5
    ** reference site:
    ** http://cn.php.net/manual/zh/ref.dom.php
    ** the follow codes need PHP5 support
    ** www.linux-cn.com
    *************************************************/
    //首先要创建一个DOMDocument对象
    $dom = new DomDocument('1.0', 'gb2312');
    //然后载入XML文件
    $dom -> load("a.xml");//输出XML文件
    //header("Content-type: text/xml;charset=gb2312");
    //echo $dom -> saveXML();//保存XML文件,返回值为int(文件大小,以字节为单位)
    //$dom -> save("newfile.xml");echo "<hr/>取得所有的title元素:<hr/>";
    $titles = $dom -> getElementsByTagName("title");
    foreach ($titles as $node)
    {
      echo $node -> textContent . "<br/>";
      //这样也可以
      //echo $node->firstChild->data . "<br/>";
    }/*
    echo "<hr/>从根结点遍历所有结点:<br/>";
    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 . "\n"; 
          } 
        } 
      } 

    *///使用XPath查询数据
    echo "<hr/>使用XPath查询的title节点结果:<hr/>";
    $xpath = new domxpath($dom);
    $titles = $xpath->query("/rss/channel/item/title");
    foreach ($titles as $node)
    {
      echo $node->textContent."<br/>";
    }
    /*
    这样和使用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的文件
    //这个地方比较笨,新创建一个节点,然后替换旧的节点。如果哪位朋友有其他好的方法请一定要告诉我
    $firstTitle = $xpath->query("/rss/channel/item/title")->item(0);
    $newTitle = $dom->createElement("title");
    $newTitle->appendChild(new DOMText("This's the new title text!!!"));
    $firstTitle->parentNode->replaceChild($newTitle, $firstTitle);
    //修改属性
    //$firstTitle = $xpath->query("/rss/channel/item/title")->item(0);
    //$firstTitle->setAttribute("orderby", "4");
    $dom->save("newfile.xml");echo "<hr/><a href=\"newfile.xml\">查看newfile.xml</a>";//下面的代码获得并解析php.net的首页,将返第一个title元素的内容。
    /*
    $dom->loadHTMLFile("http://www.php.net/"); 
    $title = $dom->getElementsByTagName("title"); 
    print $title->item(0)->textContent;
    */
    ?>
    用的PHP版本是5.2.3,在XP环境下运行的
      

  3.   

    用的PHP版本是5.2.3,在XP环境下运行的<?php
    /************************************************
    **                    use XML in PHP5
    ** reference site:
    ** http://cn.php.net/manual/zh/ref.dom.php
    ** the follow codes need PHP5 support
    ** www.linux-cn.com
    *************************************************/
    //首先要创建一个DOMDocument对象
    $dom = new DomDocument('1.0', 'gb2312');
    //然后载入XML文件
    $dom -> load("a.xml");//输出XML文件
    //header("Content-type: text/xml;charset=gb2312");
    //echo $dom -> saveXML();//保存XML文件,返回值为int(文件大小,以字节为单位)
    //$dom -> save("newfile.xml");echo "<hr/>取得所有的title元素:<hr/>";
    $titles = $dom -> getElementsByTagName("title");
    foreach ($titles as $node)
    {
      echo $node -> textContent . "<br/>";
      //这样也可以
      //echo $node->firstChild->data . "<br/>";
    }/*
    echo "<hr/>从根结点遍历所有结点:<br/>";
    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 . "\n"; 
          } 
        } 
      } 

    *///使用XPath查询数据
    echo "<hr/>使用XPath查询的title节点结果:<hr/>";
    $xpath = new domxpath($dom);
    $titles = $xpath->query("/rss/channel/item/title");
    foreach ($titles as $node)
    {
      echo $node->textContent."<br/>";
    }
    /*
    这样和使用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的文件
    //这个地方比较笨,新创建一个节点,然后替换旧的节点。如果哪位朋友有其他好的方法请一定要告诉我
    $firstTitle = $xpath->query("/rss/channel/item/title")->item(0);
    $newTitle = $dom->createElement("title");
    $newTitle->appendChild(new DOMText("This's the new title text!!!"));
    $firstTitle->parentNode->replaceChild($newTitle, $firstTitle);
    //修改属性
    //$firstTitle = $xpath->query("/rss/channel/item/title")->item(0);
    //$firstTitle->setAttribute("orderby", "4");
    $dom->save("newfile.xml");echo "<hr/><a href=\"newfile.xml\">查看newfile.xml</a>";//下面的代码获得并解析php.net的首页,将返第一个title元素的内容。
    /*
    $dom->loadHTMLFile("http://www.php.net/"); 
    $title = $dom->getElementsByTagName("title"); 
    print $title->item(0)->textContent;
    */
    ?>
      

  4.   


    $dom = new DOMDocument('1.0', 'iso-8859-1');这样看看。
      

  5.   

    我的环境是php5.2.4 + apache + xp,测试成功。这是手册上的例子。<?xml version="1.0"?>
    <foo><bar><text>DOM in PHP5 is good.</text><text>Hello.</text></bar></foo>
    $document = new DomDocument();
    $document->preserveWhiteSpace = false;
    $document->load("./xxx.xml");$xpath = new domXPath($document);
    $xpathQuery = $xpath->query("/foo/bar/text[position()=1]");
         
    foreach ($xpathQuery as $nodeList)
    {
      if($nodeList->firstChild->nodeType==XML_TEXT_NODE) 
       echo "Node is a piece of text.<br />";
    }
      

  6.   

    本人想用PHP 对XML节点进行操作,基本思想是:首先创建DomDocument();对象,然后把XML load进来,查找到要操作的节点进行操作。但是问题出现再第一步。 
    $dom = new DomDocument();时出现以下错误 domdocument::domdocument() expects at least 1 parameter, 0 given ——————————
    需要至少一个参数,但你给了0个参数
    看手册和出错提示,问题基本上都是可以自已解决的
      

  7.   

    LZ还是看看自己的环境配置吧,用你的代码随便试了个XML文件,只报节点错误,没出现你那种错误。LZ是否用了ZEND引擎
      

  8.   

    谢谢2楼和9楼。问题已经解决了。本想早回复,刚才由于帖子回多了。被系统禁止了。不好意思。原因就是PHP5自带DOM函数,我在ini配置里把php_domxml_dll打开了。造成错误。另外补充下:DomDocument();不加参数是不会报错的。希望不要误解
      

  9.   

    解决问题就好,呵呵。
    其实俺也是google到一个英文的网站,别人是这样解决的。