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
$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/