Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从HTML文本中解析和提取数据_Php_Html - Fatal编程技术网

Php 从HTML文本中解析和提取数据

Php 从HTML文本中解析和提取数据,php,html,Php,Html,我将下面的HTML文本存储在变量$domText中 <TR class="tableclass"> <TD>Veteran Job Information</TD> <TD>9.00</TD> <TD>1.2</TD> <TD><INPUT type = "text" name = "notes"></TD> </TR> 退伍军人工作信息 9 1

我将下面的HTML文本存储在变量$domText中

<TR class="tableclass">
  <TD>Veteran Job Information</TD>
  <TD>9.00</TD>
  <TD>1.2</TD>
  <TD><INPUT type = "text" name = "notes"></TD>
</TR>

退伍军人工作信息
9
1.2
我想检查第一个(这里是“退伍军人工作…”)中的文本内容是否等于“福利工作”,然后需要将第二个和第三个(这里是9.00和1.2)标记中的值存储到PHP变量中

下面是我试图做的,但我遇到了错误,我的代码根本不起作用。 “为foreach()提供的参数无效”

$dom_ChangeResults=new DOMDocument();
$dom_ChangeResults->loadHTML($domText)//将当前更改加载为HTML字符串
$dom_TableTags=$dom_ChangeResults->getElementsByTagName(“TR”)//检查表数据标记,查看全职到兼职的更改
$rows=$dom_tablettags->item(0)->getElementsByTagName('TD');
/***在表行上循环***/
foreach($行作为$行)
{
/***按标记名获取每个列***/
$cols=$row->getElementsByTagName('td');
/***响应这些值***/
echo$cols->item(0)->nodeValue.“
”; echo$cols->item(1)->nodeValue.“
”; echo$cols->item(2)->nodeValue; 回声“
”; }
您应该遍历
元素,而不是

$dom_ChangeResults=new DOMDocument();
$dom_ChangeResults->loadHTML($domText)//将当前更改加载为HTML字符串
$rows=$dom_ChangeResults->getElementsByTagName(“tr”);
/***在表行上循环***/
foreach($行作为$行){
/***按标记名获取每个列***/
$cols=$row->getElementsByTagName('td');
/***响应这些值***/
echo$cols->item(0)->nodeValue.“
”; echo$cols->item(1)->nodeValue.“
”; echo$cols->item(2)->nodeValue; 回声“
”; }
不要在PHP DomeElement中使用大写标记。不知道这是否是您提供给我们的所有代码,但PHP脚本中的大小写是主要问题,
getElementsByTagName('TD')
将返回空列表,其中
getElementsByTagName('TD')
将返回填充的列表

    $dom_TableTags = $dom_ChangeResults->getElementsByTagName("TR"); //Check table data tags for Full time to PartTime Change
    $rows = $dom_TableTags->item(0)->getElementsByTagName('TD');
这不应该是(或者你只有一排吗?)

很好,这是工作的示例代码

$domText = <<<DOM
        <TABLE>
        <TR class="tableclass">
          <TD>Veteran Job Information</TD>
          <TD>9.00</TD>
          <TD>1.2</TD>
          <TD><INPUT type = "text" name = "notes"></TD>
        </TR>
        <TR class="tableclass">
          <TD>Veteran Job Information</TD>
          <TD>9.00</TD>
          <TD>1.2</TD>
          <TD><INPUT type = "text" name = "notes"></TD>
        </TR>
        <TR class="tableclass">
          <TD>Veteran Job Information</TD>
          <TD>9.00</TD>
          <TD>1.2</TD>
          <TD><INPUT type = "text" name = "notes"></TD>
        </TR>
        </TABLE>
DOM;

    $dom_ChangeResults = new DOMDocument();
    $dom_ChangeResults->loadHTML($domText); //Load the current changes as HTML String
    $dom_TableTags = $dom_ChangeResults->getElementsByTagName("table"); //Check table data tags for Full time to PartTime Change
    $rows = $dom_TableTags->item(0)->getElementsByTagName('tr');

    /*** loop over the table rows ***/
    foreach ($rows as $row)
    {
            /*** get each column by tag name ***/
            $cols = $row->getElementsByTagName('td');
            /*** echo the values ***/
            echo $cols->item(0)->nodeValue.'<br />';
            echo $cols->item(1)->nodeValue.'<br />';
            echo $cols->item(2)->nodeValue;
            echo '<hr />';
    }

出于惯例,请不要将您的
标签大写,即
而不是
谢谢您的建议。项目就是这样完成的。就目前而言,我必须按原样使用,然后将在单独的工单中修复它们。不用担心。它对普通HTML没有任何影响,但最好遵循常规做法:P另外,当您
var\u dump($rows)
时会发生什么?因此,您的
$rows
应该包含3个
TD
s。。。那么为什么要执行
$row->getElementsByTagName('td')
?您不想执行foreach($dom_TableTags as$row)?我尝试了“TD”和“TD”等的各种变体。但在调试过程中,LHS变量($rows)将没有任何内容:-(如果我这样做,第三行上面的$rows将不包含任何内容。因此它根本不会进入FOREACH循环。@RealCoder,
$rows
将包含您的单个
元素。请参见演示:您是对的,它将返回空列表。但是您已经修改了我的HTML文件。我的HTML文本中没有任何表标记。您可以修改吗r代码,使用我在问题上发布的HTML文本吗?非常感谢这很有效,非常感谢。我不知道大写在PHP中很重要。我今天学到了新东西。
    $dom_TableTags = $dom_ChangeResults->getElementsByTagName("TR"); //Check table data tags for Full time to PartTime Change
    $rows = $dom_TableTags->item(0)->getElementsByTagName('TD');
    $dom_TableTags = $dom_ChangeResults->getElementsByTagName("table"); //Check table data tags for Full time to PartTime Change
    $rows = $dom_TableTags->item(0)->getElementsByTagName('tr');
$domText = <<<DOM
        <TABLE>
        <TR class="tableclass">
          <TD>Veteran Job Information</TD>
          <TD>9.00</TD>
          <TD>1.2</TD>
          <TD><INPUT type = "text" name = "notes"></TD>
        </TR>
        <TR class="tableclass">
          <TD>Veteran Job Information</TD>
          <TD>9.00</TD>
          <TD>1.2</TD>
          <TD><INPUT type = "text" name = "notes"></TD>
        </TR>
        <TR class="tableclass">
          <TD>Veteran Job Information</TD>
          <TD>9.00</TD>
          <TD>1.2</TD>
          <TD><INPUT type = "text" name = "notes"></TD>
        </TR>
        </TABLE>
DOM;

    $dom_ChangeResults = new DOMDocument();
    $dom_ChangeResults->loadHTML($domText); //Load the current changes as HTML String
    $dom_TableTags = $dom_ChangeResults->getElementsByTagName("table"); //Check table data tags for Full time to PartTime Change
    $rows = $dom_TableTags->item(0)->getElementsByTagName('tr');

    /*** loop over the table rows ***/
    foreach ($rows as $row)
    {
            /*** get each column by tag name ***/
            $cols = $row->getElementsByTagName('td');
            /*** echo the values ***/
            echo $cols->item(0)->nodeValue.'<br />';
            echo $cols->item(1)->nodeValue.'<br />';
            echo $cols->item(2)->nodeValue;
            echo '<hr />';
    }
$dom_ChangeResults = new DOMDocument();
$dom_ChangeResults->loadHTML($domText); //Load the current changes as HTML String
//$dom_TableTags = $dom_ChangeResults->getElementsByTagName("tr"); //Check table data tags for Full time to PartTime Change
$rows = $dom_ChangeResults->getElementsByTagName('tr');