今天编写个php操作xml的程序 从文档中看到 DomDocument->getElementById()
文档中说需要设置id 属性 和DOMDocument->validateOnParse =ture给的例子中并没有显示怎么设置id属性  我用setIdAttribute  结果说不支持此函数
谁能告诉我怎么用这个啊  给个例子  谢谢各位大虾了

解决方案 »

  1.   

    http://school.itzcn.com/special-spid-30.html 
    确实不错  但并没有找到我要的东西  你能告诉我  那个里面有相关东西么 谢谢
      

  2.   

    $xml = '<news><item id="1"><title>Item1</title></item><item id="2"><title>Item2</title></item></news>';
    $doc = new DOMDocument();
    $doc->loadXML($xml);
    foreach($doc->getElementsByTagName('item') as $item)
    {
    $item->setIdAttribute('id', true);
    }
    echo $doc->getElementById('1')->childNodes->item(0)->nodeValue;//Item1
      

  3.   

    我的代码
    $dom=new DomDocument();
    $path=dirname(__FILE__);
    $dom->validateOnParse=true;
    $dom->load("config.xml");

    $conf=$dom->getElementsByTagName('conf');

    if(!empty($conf)){
    foreach($conf as $i){
    $i->setIdAttribute('name', true);
    }
    }
    echo $dom->getElementById('other_ppd_keyword')->tagName;
    提示错误DOMElement::setIdAttribute() [function.DOMElement-setIdAttribute]: Not yet implemented 
      

  4.   

    我这边运行没有问题。环境winxp+apache2.2+php5.3.1$dom=new DomDocument();
    $dom->loadXML('<conf name="other_ppd_keyword"/>');$conf=$dom->getElementsByTagName('conf');if(!empty($conf)){
    foreach($conf as $i){
    $i->setIdAttribute('name', true);
    }    
    }    
    echo $dom->getElementById('other_ppd_keyword')->tagName;//conf
      

  5.   

    另外还有两种方法:使用DTD或使用XPath。$xml = <<<XML
    <!DOCTYPE news 
    [
    <!ELEMENT news (item*)>
    <!ELEMENT item (title)>
    <!ELEMENT title (#PCDATA)>
    <!ATTLIST item id ID #REQUIRED>
    ]>
    <news>
    <item id="ITEM-1"><title>Item1</title></item>
    <item id="ITEM-2"><title>Item2</title></item>
    </news>
    XML;
    $doc = new DOMDocument();
    $doc->validateOnParse = true;
    $doc->loadXML($xml);
    echo $doc->getElementById('ITEM-1')->childNodes->item(0)->nodeValue;$xpath = new DOMXPath($doc);
    echo $xpath->query('//item[@id="ITEM-1"]')->item(0)->nodeValue;
      

  6.   

    谢谢 7楼的  其实我也一直用 DTD 但是老是提示 空格的问题  不过把你的代码考过去就没有问题了