Php 从HTML文本中解析和提取数据
我将下面的HTML文本存储在变量$domText中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
<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');