Php 如何使用getElementById

Php 如何使用getElementById,php,dom,Php,Dom,我想得到tds中的值。我可以通过getElementsByTagName来完成它,但是我不能通过使用getElementById来管理它 HTML可能如下所示: <table id="myid"> <tr> <td>value1</td> <td>value2</td> </tr> <tr> <td>value1</td> <td>value2</td>

我想得到tds中的值。我可以通过getElementsByTagName来完成它,但是我不能通过使用getElementById来管理它

HTML可能如下所示:

<table id="myid">
<tr>
<td>value1</td>
<td>value2</td>
</tr>
<tr>
<td>value1</td>
<td>value2</td>
</tr>
</table>
用于访问值的php是:

<?PHP
$dom = new DOMDocument();
$dom->loadHTMLfile('http://remoteDomain/thispage.html');
$table=$dom->getElementById('myid');

    foreach($table->getElementsByTagName('tr') as  $key =>$tr){
       $tr->getElementsByTagName('td')->item(0)->nodeValue;
    }
?>
编辑

我得到了一个错误: 致命错误:对中的非对象调用成员函数getElementsByTagName

编辑2

Php信息:

启用DOM/XML DOM/XMLAPI版本20031129 libxml版本2.7.3


操作系统:Windows

您需要在id属性上加引号

<table id="myid">
顾名思义,getElementById仅在目标元素实际具有id时才起作用。

问题在于getElementById需要DOCTYPE。如果你加上

在文件的开头,它应该可以工作。您还应该添加html和body标记

编辑:还需要将$dom->validateOnParse=true;在加载HTML文件之前


这显然是DomDocument类的一个特性,请参见注释,据我所知,您希望在foreach getElementById中使用,并且代码正常工作

可以看出,名称getElement[S]ByTagName和getElementById因用途不同而有所不同

id的定义可以说是一个页面中元素的唯一标识符,因此假设在单个页面上只保留一个id唯一值,并且该值不能分配给另一个元素id。如果有多个元素具有相同的id值,我认为这是错误的,因为HTML 4或XHTML 1.0

您使用的方式看起来是有效的

编辑


在这种情况下,您可能会在此处找到一个答案:

是的,该表有一个id。您的标记将需要一个id属性,以便使用getElementById直接指向它们。您是想针对表还是td?原始表中的idUh周围有引号。您的问题没有显示出来,直到您更改了它-但感谢下一票-上次我回答您的一个问题。他不需要在id属性周围加引号,只要他使用loadHTML或loadHTMLFile加载html。libxml将使用html解析器模块,然后自动更正它。答案是错误的。他说输出的HTML是id=myid——这不是有效的HTML,id属性将不可用。它将无效,但不是不可用的。libxml的html解析器可以处理无效的html,并将自动更正它。看见这里的问题是过时的libxml版本。在id周围添加引号不会起任何作用。请参阅loadHTMLFile将添加任何缺少的HTML框架,并将HTML视为HTML 4 Transitional。validateOnParse在大多数情况下都没有帮助。升级PHP或者更确切地说是升级libxml将是可行的。不过PHP文档是这么说的。我在关闭validateOnParse的情况下尝试了它,但它在PHP5.3.6时不起作用;Ubuntu,请看。没有验证解析,只有最近的libxml。然后与Yea相比,并不是我不相信你,我只是想指出它对我有效:你忘了回显nodeValues,以防调用成员函数getElementsByTagName blah确保有最新版本的libxml。您可以手动安装,也可以将PHP升级到最新版本。完全重复的@mustafa my code不起作用是没有帮助的。一点也不。如果您需要帮助,请解释您的问题。@mustafa,您的问题以前在堆栈溢出中遇到过,请参阅上面我编辑的答案。