这是我的问题,我有许多表,tr和td的html文件。我已经从DOM的特定领域获得特定价值。但是我希望得到所有的价值,如果条件像我做的那样没有许多,因为每个表都有不同的位置字段td。我想在 Dimension:之后得到值,所以虽然每个表都有不同的位置字段td可以获得该值。你可以给出像使用正则表达式的解决方案来获得特定的价值。如果100个表格和维度: td位置如何在不同的位置,如果条件,它会产生很多。我希望你能得到我说的话。抱歉,我的英文。这是我的代码和输出如下。这个只是一点代码。
表:
<HTML>
<BODY>
<TABLE class="tab1" border="1" cellpadding="0" cellspacing="0" summary="">
<TR>
<TH align=left colspan=2 bgcolor=#0066CC><H1> Start RIP Job</H1>
</TH>
</TR>
<TR>
<TH align=left> Printer:
</TH>
<TD class="td1" align=left> RunJiang Flora 3204P
</TD>
</TR>
<TR>
<TH align=left> File:
</TH>
<TD class="td1" align=left> 8iG6e8r5T.png
</TD>
</TR>
<TH align=left> Dimensions:
</TH>
<TD class="td1" align=left> 39.2 x 38.8cm
</TD>
</TR>
</TABLE>
</BODY>
</HTML>
另一张表:
<HTML>
<BODY>
<TABLE class="tab1" border="1" cellpadding="0" cellspacing="0" summary="">
<TR>
<TH align=left colspan=2 bgcolor=#0066CC><H1> Start Printing</H1>
</TH>
</TR>
<TR>
<TH align=left> Printer:
</TH>
<TD class="td1" align=left> RunJiang
</TD>
</TR>
<TR>
<TH align=left> File:
</TH>
<TD class="td1" align=left> 8.png
</TD>
</TR>
<TR>
<TH align=left> Resolution:
</TH>
<TD class="td1" align=left> 39.2 x 38.8cm
</TD>
</TR>
<TR>
<TH align=left> Dimension:
</TH>
<TD class="td1" align=left> 29.2 x 28.8cm
</TD>
</TR>
</TABLE>
</BODY>
</HTML>
代码:
$source=file_get_contents("C://xampp/htdocs/Champion/machine-
logs/LogCampusHTML/CPSITES.HTML");
$dom = new DOMDocument();
$dom->loadHTML($source);
$rows = $dom->getElementsByTagName("table");
$a = "Start RIP Job.....";
$length = strlen($a);
$b = "Start Printing.....";
$length1 = strlen($b);
foreach ($rows as $ala) {
$pjg = $ala->getElementsByTagName("td");
$tes = $pjg->length;
$rs = $head->length;
$ben = $ala->getElementsByTagName('th')->item(0)->textContent;
$length2 = strlen($ben);
$satu= $ala->getElementsByTagName('th')->item(0)->textContent;
$dua= $ala->getElementsByTagName('td')->item(0)->textContent;
$tiga= $ala->getElementsByTagName('td')->item(1)->textContent;
if($length2 == $length){
$empat= $ala->getElementsByTagName('td')->item(4)->textContent;
}else if($length2 == $length1){
$empat= $ala->getElementsByTagName('td')->item(3)->textContent;
}
}
echo $dua;
echo $tiga;
echo $empat;
输出:
RunJiang Flora
8iG6e8r5T.png
39.2 x 38.8cm
润江
8.png
29.2 x 28.8cm
答案 0 :(得分:1)
使用XPath,您可以选择与文档中的其他内容相关的内容。所以没有循环或ifs ......
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
$source=file_get_contents("NewFile.html");
$dom = new DOMDocument();
$dom->loadHTML($source);
print_r($dom);
$xp = new DOMXPath($dom);
$textList = $xp->query("//th[contains(text(),'Printer')]/../td/text()");
foreach ( $textList as $text ) {
echo "Text=".$text->nodeValue.PHP_EOL;
}
此代码检索Printer标签后的数据。 XPath查找<th>
标记,其中包含包含Printer的文本,然后返回到某个级别(到<tr>
),然后返回到<td>
字段并返回文本。
相同的逻辑可以应用于任何其他th / td组合。虽然它确实假设数据是该tr中唯一的td标记,但如果是这种情况则应该这样做。
编辑: 要将循环次数和组数据限制在一起,另一种方法是......
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
$source=file_get_contents("NewFile.html");
$dom = new DOMDocument();
$dom->loadHTML($source);
$xp = new DOMXPath($dom);
$textList = $xp->query("//table[//th[contains(text(),'Printer:')]]");
foreach ( $textList as $text ) {
$printer = $xp->evaluate(
"string(descendant::tr[th[contains(text(),'Printer')]]/td/text())",
$text);
echo "printer=".$printer.PHP_EOL;
$dimension = $xp->evaluate(
"string(descendant::tr[th[contains(text(),'Dimensions')]]/td/text())",
$text);
echo "Dimensions=".$dimension.PHP_EOL;
}
这只为每个表中都有一个循环,其中包含一个“Printer”元素,对于每个表,它为你后面的每个字段提取值。