【问题标题】:How to get child element of DOMDocument如何获取 DOMDocument 的子元素
【发布时间】:2018-07-24 02:15:39
【问题描述】:

尝试从包含trtd 元素的表中获取特定值...

HTML:

<table>
  <tr>
    <td>value1</td>
    <td>value2</td>
    <td>value3</td>
  </tr>
</table>

PHP:

$html = 'http://www.example.com'; // edited

$dom = new DOMDocument;

@$dom->loadHTML($html);
$data = $dom->getElementsByTagName('tr:nth-child(3n)');

foreach ($data as $datas){
        echo $link->nodeValue;
}

使用这种或不同的方法,如何获取特定td元素的值...?

【问题讨论】:

  • 为什么不使用 JavaScript 呢?顺便说一句,data 已经是复数了,不需要“s”
  • 尚不清楚您遇到了哪些问题,您遇到了一些不同的问题。 loadHTML 采用源 HTML 字符串,而不是 URL。你没有初始化你的 $datas 变量。 getElementsByTagName 只接受标签名称,而不是 CSS 选择器。

标签: php html css dom


【解决方案1】:

使用getElementsByTagName() 会根据您的起点返回标签列表,因此一旦找到该表,您就可以使用相同的函数来获取&lt;td&gt; 标签。然后,您可以挑选出您之后的元素...

$data = "<table>
  <tr>
    <td>value1</td>
    <td>value2</td>
    <td>value3</td>
  </tr>
</table>";

$dom = new DOMDocument;

$dom->loadHTML($data);
$table = $dom->getElementsByTagName('table');
$td = $table[0]->getElementsByTagName('td'); // Fetch all td elements in the first table

echo $td[2]->nodeValue;   // Echo out the value of the 3rd item (zero based arrays)

打印出来..

value3

【讨论】:

【解决方案2】:

xPath 可用于获取特定元素。尝试使用以下代码从给定的 html 中获取第三个 td 值。

$html = '<table>
  <tr>
    <td>value1</td>
    <td>value2</td>
    <td>value3</td>
  </tr>
</table>';
$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$table = $dom->getElementsByTagName('table')->item(0);
$query = 'tr/td[3]';

$entries = $xpath->query($query, $table);

echo $entries[0]->nodeValue;

了解DOMXpath query()

更新:file_get_content的使用也很简单,你可以在$html变量中检索html/xml作为字符串,其余过程相同:

$html = file_get_contents("path/to/file/x.html"); // target path

【讨论】:

  • 感谢您的回答。但是,我需要它与“file_get_contents”一起使用
  • @Gensus 你是认真的吗?他们在此示例中所做的只是将$html = file_get_contents(...) 替换为$html = 'some string' - 现在你表现得好像这不是你问题的答案......?
  • @Gensus 通过清晰的代码示例了解如何清晰地提出问题。您的问题无处不在,并且您通过编辑原始问题/代码示例不断移动目标帖子。
  • 也感谢您的帮助@DecentDabbler
  • @Gensus 答案已更新!
【解决方案3】:

我认为这应该对你有所帮助。

只需为 td 元素分配类名,然后使用它

例如:

<td class="two">value2</td>
$(this).closest('tr').children('td.two').text();

【讨论】:

    猜你喜欢
    • 2013-05-19
    • 2012-05-18
    • 1970-01-01
    • 2012-03-22
    • 2011-08-18
    • 1970-01-01
    • 2013-06-13
    • 2020-10-30
    • 1970-01-01
    相关资源
    最近更新 更多