使用DOMDocument在现有HTML表中创建新列 - php

尝试使用DOMDocument和DOMXpath在现有表中创建新列

$doc = new DOMDocument();
$doc->loadHTMLFile("example.html");

这是位于example.html中的表的结构:

<table id="transactions" class="table">
    <thead>
        <tr>
            <th class="image"></th>
            <th class="title"><span>Title</span></th>
        </tr>
    </thead>
    <tbody>
        <tr id="tbody-tr">
            <td class="image">
                <img src="http://www.example.com/image.jpg">
            </td>
            <td class="title">Title
            </td>
            <td class="date">12/16/2017
            </td>
        </tr>
        <tr id="tbody-tr">
            <td class="image">
                <img src="http://www.example.com/image.jpg">
            </td>
            <td class="title">Title
            </td>
            <td class="date">12/16/2017
            </td>
        </tr>
    </tbody>
</table>

在这种情况下,该表的xpath查询将是

$table =  $xpath->query('//*[@id="transactions"]');

对于<tr id="tbody-tr">元素

$tr = $xpath->query('/*[@id="tbody-tr"]');

对于<td>行元素-/ td [1] / td [2] / td [3]

$td = $xpath->query('//*[@id="tbody-tr"]/td[3]');

我正在尝试为<td class="example"></td>的所有实例在<td class="title"><td class="date">之间创建一个附加列(<tr id="tbody-tr">)(大约有50个,但为问题而缩小了)。

我是DOMDocument和HTML解析操作的新手,在试图弄清楚如何做到这一点方面真是费了点时间。

我假设我要么必须使用我的xpath->query循环它,例如

foreach ($ttrows as $row) {
    $td = $doc->createElement('td');
    $parent = $row->parentNode;
    $parent->appendChild($row);
    $td->setAttribute('class','example');
}

或使用DOMDocuments getElementById或类似的东西。

foreach ($table = $doc->getElementById('tbody-tr') as $table) {
    $td = $doc->createElement('td');
    $td->setAttribute('class', 'example');
    $td->appendChild($table);
    $table->insertBefore($td, $table);
}

就像我说的那样,我是DOMDocument的新手,所以这两个示例几乎都不起作用。.但是我认为我朝着正确的方向前进(我希望)。

我认为,该表的结构相当好,可以在DOMDocument中进行此类操作。有人可以对此进行说明吗,我的尝试和错误使我收效甚微。

解:

foreach ($td as $row) {
    $td = $doc->createElement('td', 'text to be inserted');
    $td->setAttribute('class','example');
    $row->parentNode->insertBefore($td, $row);
}

注意上面

$td = $xpath->query('//*[@id="tbody-tr"]/td[3]');

是第三个<td>date

参考方案

请记住,您不能/不应该在同一页面上有多个ID。

然后只需使用$tr->insertBefore($td, $tr->childNodes->item(3));

这意味着,当前节点在第3个td之前插入新的dom节点。

<?php
foreach ($doc->getElementsByTagName('tr') as $tr) {
    $td = $doc->createElement('td');
    $td->setAttribute('class', 'example');

    $tr->insertBefore($td, $tr->childNodes->item(3));
}

https://3v4l.org/TthE7

另外要考虑的是添加thead > th,否则将破坏表的外观。

foreach ($doc->getElementsByTagName('tr') as $tr) {

    // insert into thead > th
    if ($tr->childNodes->item(0)->nodeName == 'th') {
        $th = $doc->createElement('th');
        $th->setAttribute('class', 'example');
        $th->nodeValue = 'Example';
        $tr->insertBefore($th, $tr->childNodes->item(3));
    } 
    // insert into body > td
    else {
        $td = $doc->createElement('td');
        $td->setAttribute('class', 'example');

        $tr->insertBefore($td, $tr->childNodes->item(3));
    }
}

https://3v4l.org/1sj7s

验证IBAN PHP - php

在设计新平台时,我们尝试集成IBAN编号。我们必须确保IBAN已经过验证,并且存储在数据库中的IBAN始终正确。那么验证数字的正确方法是什么? 参考方案 正如我在其他问题中解释的逻辑一样,我尝试自己创建一个函数。根据Wikipedia文章中解释的逻辑,在下面找到合适的功能。国家特定验证。它适合吗http://en.wikipedia.org/wiki/Int…

代码未在服务器目录php中创建文件 - php

我正在尝试使用以下代码将新文件写入服务器error_reporting(E_ALL); ini_set('display_errors', 1); if($_SERVER['REQUEST_METHOD'] == "POST") { $html = $_POST['html'];…

在xpath中选择多个条件 - php

我正在尝试使用来自高尔夫比赛的xml提要,以显示每个高尔夫球手在高尔夫球场上的位置。目前,我想展示符合两个条件的所有高尔夫球手(排在前25名,以及所有加拿大高尔夫球手)。这是xml提要的示例。<GolfDataFeed Type="Leaderboards" Timestamp="3/21/2012 9:18:09 PM&…

无法使用Uploadify脚本上传文件 - php

我正在使用Uploadify插件上传文件。尽管这可能是一个非常基本的问题,但我无法理解和实现,无法正常工作以上传文件。我想使用uploadify实现以下目标当用户选择文件时,我希望使用PHP将其直接上传到目标路径。现在我正在使用以下代码。<html> <head> <link rel="stylesheet"…

将输入类型复选框关联到输入类型文本 - php

我有一个问题,我需要将输入类型复选框与输入类型文本关联。情况如下:从数据库中提取数据。 PK数据是复选框的值。当复选框选择输入类型的文本时,您可以在其中输入特定数字。现在的问题是,选中所有类型的复选框输入文本都会被激活。我希望通过选择复选框输入,仅启用与复选框相关联的输入。我的HTML代码(此代码创建一个输入复选框,并为数据库中的每个记录输入文本,而我要激活…