可能重复:
简化PHP DOM XML解析-如何?
这是我的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!
我认为手册解释了可能发生这种情况的原因
要使此函数工作,您需要使用DOMElement->setIdAttribute()或DTD设置一些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