【问题标题】:counting html table rows with domDocument用 domDocument 计算 html 表格行数
【发布时间】:2018-03-19 22:13:24
【问题描述】:

我正在使用 domDocument 来计算 html 表中的行数。这是我的代码

if(isset($_POST['List']) && $_POST['List'] == true)
{
    $data = file_get_contents('File.php');
    $dom = new domDocument;
    @$dom->loadHTML($data);
    $dom->preserveWhiteSpace = false;
    $table = $dom->getElementById('Table');
    $rows = substr_count($table, "<tr>");

    for($x=0;$x<$rows;$x++)
    {

    }
}

单步执行代码,$rows 为空。 这是$table的内容

tagName:"table"
schemaTypeInfo:null
nodeName:"table" 
nodeValue:"\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tCategoryAMA1A2ABBECCEC1C1EDDED1D1EW\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t"
nodeType:1
parentNode:"(object value omitted)"
childNodes:"(object value omitted)"
firstChild:"(object value omitted)"
lastChild:"(object value omitted)"
previousSibling:"(object value omitted)"
nextSibling:null
attributes:"(object value omitted)"
ownerDocument:"(object value omitted)"
namespaceURI:null
prefix:""
localName:"table"
baseURI:null
textContent:"\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tCategoryAMA1A2ABBECCEC1C1EDDED1D1EW\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t"

我已将代码更改如下

$url = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
$doc = new domDocument();
@$doc->loadHTMLFile($url);
$table = $doc->getElementById('Table');
$rows = $table->getElementsByTagName('tr');
$count = count($rows);

我提交了表格中包含 2 行的表单,但计数为 1。 这是$table的内容

tagName:"table"
schemaTypeInfo:null
nodeName:"table" 
nodeValue: "\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tCategoryAMA1A2ABBECCEC1C1EDDED1D1EW\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tDate\r\n\t\t\t\t\t\t"
nodeType:1
parentNode:"(object value omitted)"
childNodes:"(object value omitted)"
firstChild:"(object value omitted)"
lastChild:"(object value omitted)"
previousSibling:"(object value omitted)"
nextSibling:null
attributes:"(object value omitted)"
ownerDocument:"(object value omitted)"
namespaceURI:null
prefix:""
localName:"table"
baseURI:null
textContent: "\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tCategoryAMA1A2ABBECCEC1C1EDDED1D1EW\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tDate\r\n\t\t\t\t\t\t"

loadHTMLFile 和 file_get_contents 有同样的限制,只能看到原始的 html 吗?

【问题讨论】:

    标签: php domdocument


    【解决方案1】:

    选择表格后,您可以使用getElementsByTagName 获取其行。

    $rows = $table->getElementsByTagName('tr');
    

    结果将是一个具有length 属性的DOMNodeList 对象,这应该是您要查找的计数。

    echo $rows->length;
    

    看起来您只是使用行数来设置 for 循环,这可能不是必需的,因为您可以使用 foreach 迭代行集。

    foreach ($rows as $row) {
        // do something with the row
    }
    

    【讨论】:

    • 一个小问题。最初,表格有 1 行,带有一个按钮,允许用户在单击时使用 JavaScript 添加一行。我添加了第二行。长度返回 1,而不是 2。看起来 php 没有看到 JavaScript 添加的行,否则长度会是 2,不是吗?还是有其他合乎逻辑的解释?
    • 不,这是正确的解释。使用file_get_contents,您将获得保存在磁盘上的原始、未经修改的页面版本。如果您想在客户端修改页面后获取页面状态,则必须编写一些 JavaScript 来收集您需要的信息并将其发送回。
    • 所以 JavaScript 可以这么说。将修改后的html表格数据保存在js变量中,提交后读取。你是这个意思吗?
    • 有点。我的意思是在 AJAX 请求中实际使用 JS 提交修改后的表数据。如果您只有 JS 变量中的数据,然后正常提交表单(没有 JS),那么这些变量都不会在服务器端可用。
    • 是什么触发了AJAX请求,JS还是PHP?很久以前用过一次 AJAX。
    猜你喜欢
    • 1970-01-01
    • 2012-07-23
    • 2010-12-25
    • 1970-01-01
    • 2010-12-31
    • 2014-12-25
    • 2013-07-04
    • 2011-08-20
    相关资源
    最近更新 更多