0

我正在使用 PHP DOMDocument 类来解析 HTML 文件,并使用代码,

$dom =new DOMDocument();
@$dom->loadHTMLFile($file_path);
$dom->getElementById("my_id")

获取 ID 为“my_id”的元素的数据,但问题是 HTML 文档包含多个具有相同 ID 的元素,我想要所有元素中的数据.. HTML 代码,

<div id="my_id">
     phone number 123
</div>
<div id="my_id">
     address somewhere 
</div>
 <div id="my_id">
     date of birth
</div>

我知道 ID 是唯一的,但这里的情况是这样的.. 在这种情况下 getElementById() 将返回一个数组..

4

4 回答 4

1

不,如果有任何东西getElementById()会返回一个DOMElement. 如果有多个返回节点,结果将是 a DOMNodeList,但这不适用于此处。

此外,在您根据将 id 属性定义为实际 XML ID 属性(不同于其他属性)的 DTD 或 Schema 文件验证 Document 之前, DOM不会识别您的 ID。这就是为什么DOMAttr有一个方法isId和 XML 要求 ID 具有唯一值的原因。正如 VolkerK 在评论中指出的那样,使用 时loadHTMLFile,此验证将自动进行。

请参阅我对简化 PHP DOM XML 解析的回答- 如何?了解更多详细信息。

于 2010-08-17T11:08:08.073 回答
0

如果您(或其他人)绝对无法修复传入的数据(正如已经指出的那样,这是唯一真正正确的做法)这可能是SimpleHTMLDOM更宽松的解析结果证明是富有成效的情况。

我还没有尝试过它是如何处理这个问题的,但我可以想象

foreach ($html->find('div[id=my_id]') as $element)
 echo "Found ".$element->id."<br>";

根据需要工作。

于 2010-08-17T11:23:50.063 回答
0

也许 ID 属性的 XPath 查询可以提供帮助。

于 2010-08-17T11:12:13.780 回答
0

没有。您会发现 getElementById 的值是未定义的,尽管您将能够发现该元素是 DIV

于 2010-08-17T11:09:25.837 回答