Possible Duplicate:
Simplify PHP DOM XML parsing - how?




这是我的XML(c.xml):

<?xml version="1.0" encoding="utf-8"?>
<root>
    <head>
        <title id="title">Hello</title>
    </head>
</root>


我做的事:

$dom = new DOMDocument;

$dom->load('./c.xml');

var_dump($dom->getElementById('title'));die(); // returns NULL


这里有什么问题&?

UPD

$dom->validate();返回DOMDocument::validate(): no DTD found!

最佳答案

我认为The Manual解释了为什么会发生这种情况


为了使此功能起作用,您将需要使用DOMElement-> setIdAttribute()设置一些ID属性,或者将DTD定义为ID类型。在后一种情况下,在使用此功能之前,您需要使用DOMDocument-> validate()或DOMDocument-> validateOnParse来验证文档。


可能的修复:


呼叫$dom->validate();,此后您可以使用$dom->getElementById(),而不管由于某些原因而产生的错误。
如果您不想验证,请使用XPath:

$x = new DOMXPath($dom);

$el = $x->query("//*[@id='title']")->item(0); //查找id = title


使用自定义DTD的示例:

$dtd = '<!ELEMENT note (to,from,heading,body)>
        <!ELEMENT to (#PCDATA)>
        <!ELEMENT from (#PCDATA)>
        <!ELEMENT heading (#PCDATA)>
        <!ELEMENT body (#PCDATA)>';

$systemId = 'data://text/plain;base64,'.base64_encode($dtd);

$creator = new DOMImplementation;
$doctype = $creator->createDocumentType($root, null, $systemId); //Based on your DTD from above

关于php - DOMDocument::getElementById返回NULL ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12298833/

10-12 06:02