使用php dom文档打印html表

使用php dom文档打印html表,php,domdocument,dom,Php,Domdocument,Dom,需要帮助 我想使用php domdocument在我们的网页中打印这段html代码,但这很困难 我也写了下面的代码。你能帮帮我吗 <table width="610" id="machine" border="0" cellSpacing="10" cellPadding="0"> <TBODY> <TR> <TD colSpan=2 align=left> <

需要帮助

我想使用php domdocument在我们的网页中打印这段html代码,但这很困难 我也写了下面的代码。你能帮帮我吗

<table width="610" id="machine" border="0" cellSpacing="10"
    cellPadding="0">

    <TBODY>
        <TR>
            <TD colSpan=2 align=left>
            <DIV id=breadcrumbs><A href="/new-and-used-machinery.php">All
            Machines</A> &nbsp;&gt;&nbsp; <A
                href="/listing.php?cat=Air+Compressors">Air Compressors</A>
            &nbsp;&gt;&nbsp;</DIV>
            <DIV id=ForSale>FOR SALE:</DIV>
            <H1>5 CFM Used Speedaire Air Compressor, Single Phase, 60 Gallon
            tank, 1.5 H.P. #A1194</H1>
            </TD>
        </TR>
        <TR>
            <TD id=photos vAlign=top width=270 align=middle>
            <DIV id=ClickPhotos>Click On Photos For Larger Image:</DIV>
            <!-- PHOTOS DB div style="margin-bottom:12px"><img src="thumb.php?id=A1194.jpg&amp;w=250&amp;h=250"></div --><!-- ORIG PHOTOS div style="margin-bottom:12px"><img src="thumb.php?f=A1194.jpg&amp;w=250&amp;h=250"></div -->
            <DIV style="MARGIN-BOTTOM: 12px"><A
                href="/photos.php?id=7135&amp;p=1"><IMG
                title="Used Speedaire Air Compressor"
                alt="Used Speedaire Air Compressor"
                src="/class/class_Image.php?load=cGhvdG9zL0ExMTk0LmpwZ3wyNTB8MjUwfDF8"></A>
            </DIV>
            <!-- PHOTOS DB div style="margin-bottom:12px"><img src="thumb.php?id=A1194_1.jpg&amp;w=250&amp;h=250"></div --><!-- ORIG PHOTOS div style="margin-bottom:12px"><img src="thumb.php?f=A1194_1.jpg&amp;w=250&amp;h=250"></div -->
            <DIV style="MARGIN-BOTTOM: 12px"><A
                href="/photos.php?id=7135&amp;p=2"><IMG
                title="Used Speedaire Air Compressor"
                alt="Used Speedaire Air Compressor"
                src="/class/class_Image.php?load=cGhvdG9zL0ExMTk0XzEuanBnfDI1MHwyNTB8MXw="></A>
            </DIV>
            </TD>
            <TD id=details vAlign=top width=310 align=left>
            <TABLE
                style="BORDER-BOTTOM: #cdcdcd 1px solid; BORDER-LEFT: #cdcdcd 1px solid; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: #eee; PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: #cdcdcd 1px solid; BORDER-RIGHT: #cdcdcd 1px solid; PADDING-TOP: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px"
                id=machine_buttons border=0 cellSpacing=3 cellPadding=0>
                <TBODY>
                    <TR>
                        <TD><A onmouseover="swapImg('Manufact', true)"
                            onmouseout="swapImg('Manufact', false)"
                            href="/manufacturer.php?brand=Speedaire"><IMG id=icon_Manufact
                            border=0 alt="" src="/images/machine_button_Manufact.gif"
                            width=66 height=33><BR>
                        Manufacturer Info</A></TD>
                    </TR>
                    <TR>
                        <TD><A onmouseover="swapImg('Category', true)"
                            onmouseout="swapImg('Category', false)"
                            href="/listing.php?cat=Air+Compressors"><IMG id=icon_Category
                            border=0 alt="" src="/images/machine_button_Category.gif"
                            width=66 height=33><BR>
                        Similar Machines</A></TD>
                    </TR>
                    <TR>
                        <TD><A onmouseover="swapImg('Brochure', true)"
                            onmouseout="swapImg('Brochure', false)"
                            href="/manufacturer.php?brand=Speedaire#brochures" target=_blank><IMG
                            id=icon_Brochure border=0 alt=""
                            src="/images/machine_button_Brochure.gif" width=66 height=33><BR>
                        OEM Brochure</A></TD>
                    </TR>
                    <TR>
                        <TD><A style="CURSOR: pointer" id=shadowbox_email class=sb
                            title="Used Speedaire Air Compressor" href="/share.php?id=7135"
                            rel=shadowbox;width=520;height=500 shadowboxCacheKey="1"
                            onMouseOver="swapImg('Email', true)"
                            onMouseOut="swapImg('Email', false)" jQuery1316148993734="2"><IMG
                            id=icon_Email border=0 alt=""
                            src="/images/machine_button_Email.gif" width=66 height=33
                            jQuery1316148993734="3"><BR>
                        Email A Friend</A></TD>
                    </TR>
                    <TR>
                        <TD><A onmouseover="swapImg('Ship', true)"
                            onmouseout="swapImg('Ship', false)" href="/shipping.php?id=7135"><IMG
                            id=icon_Ship border=0 alt=""
                            src="/images/machine_button_Ship.gif" width=66 height=33><BR>
                        Shipping</A></TD>
                    </TR>
                </TBODY>
            </TABLE>
            <DIV id=QuickQuote><A href="/machine-print.php?id=7135" target=_blank><IMG
                title="Print a Quick Quote!" border=0 alt="Print a Quick Quote!"
                align=absMiddle
                src="http://www.sterlingmachinery.com/images/quick_quote.jpg"> </A></DIV>
            <DIV style="MARGIN: 5px 0px 0px 45px">
            <FORM method=post name=addmachine action=/request-quote.php
                jQuery1316148993734="5"><INPUT id=add
                title="Add Machine to Quote Cart" value="Add Machine to Quote Cart"
                alt="Add Machine to Quote Cart"
                src="http://www.sterlingmachinery.com/images/quick_add.jpg"
                type=image name=add jQuery1316148993734="7"> <IMG
                style="DISPLAY: none; CURSOR: pointer" id=remove
                title="Remove from quote cart" name=remove
                alt="Remove from quote cart" src="/images/remove.gif" width=16
                height=16 jQuery1316148993734="8">
            <DIV style="MARGIN-TOP: 5px"><INPUT id=view title="View Quote Cart"
                value="View Quote Cart" alt="View Quote Cart"
                src="http://www.sterlingmachinery.com/images/quick_view.jpg"
                type=image name=view></DIV>
            </FORM>
            </DIV>
            <BR>
            <TABLE id=machine_stats border=0 cellSpacing=5 cellPadding=0
                width=300>
                <TBODY>
                    <TR>
                        <TD class=field vAlign=top align=right>Stock #</TD>
                        <TD vAlign=top align=left>A1194</TD>
                    </TR>
                    <TR>
                        <TD class=field vAlign=top align=right>Manufacturer:</TD>
                        <TD vAlign=top align=left><A
                            href="/manufacturer.php?brand=Speedaire">Speedaire</A></TD>
                    </TR>
                    <TR>
                        <TD class=field vAlign=top align=right>Model:</TD>
                        <TD vAlign=top align=left><A
                            href="/listing.php?cat=Air+Compressors"></A></TD>
                    </TR>
                    <TR>
                        <TD class=field vAlign=top align=right>Capacity:</TD>
                        <TD vAlign=top align=left><A
                            href="/listing.php?cat=Air+Compressors">5 CFM</A></TD>
                    </TR>
                    <TR>
                        <TD class=field vAlign=top align=right>Price:</TD>
                        <TD vAlign=top align=left><SPAN style="BACKGROUND-COLOR: #ffff00">$350</SPAN></TD>
                    </TR>
                    <TR>
                        <TD class=field vAlign=top align=right>Category:</TD>
                        <TD vAlign=top align=left><A
                            href="/results.php?keywords=Air+Compressors">Air Compressors</A></TD>
                    </TR>
                    <TR>
                        <TD class=field vAlign=top align=right>Condition:</TD>
                        <TD vAlign=top align=left>Used Machinery</TD>
                    </TR>
                </TBODY>
            </TABLE>
            <FIELDSET><LEGEND>Full Description</LEGEND>
            <TABLE id=machine_specs border=0 cellSpacing=0 cellPadding=4
                width=300>
                <TBODY>
                    <TR>
                        <TD
                            style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px"
                            class=field vAlign=top align=right>CFM Rating:</TD>
                        <TD
                            style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px"
                            vAlign=top align=left>5</TD>
                    </TR>
                    <TR>
                        <TD class=field vAlign=top align=right>Tank Size:</TD>
                        <TD vAlign=top align=left>60 Gallon</TD>
                    </TR>
                    <TR>
                        <TD class=field vAlign=top align=right>Weight:</TD>
                        <TD vAlign=top align=left>400 LBS.</TD>
                    </TR>
                </TBODY>
            </TABLE>
            </FIELDSET>
            <FIELDSET><LEGEND>Equipped With</LEGEND>Single Phase Motor<BR>
            Horsepower: 1 1/2</FIELDSET>
            <DIV class=privates>* Temporary specifications subject to
            verification.<BR>
            &nbsp; All quotations subject to prior sale.</DIV>
            </TD>
        </TR>
    </TBODY>

</table>

待售的:
5 CFM二手Speedaire空气压缩机,单相,60加仑
油箱,1.5马力#A1194
单击照片查看更大的图像:

股票# A1194 制造商: 型号: 容量: 价格: $350 类别: 条件: 二手机械 完整描述 CFM评级: 5. 储罐尺寸: 60加仑 重量: 400磅。 配备单相电机
马力:1 1/2 *临时规范应符合以下要求: 验证。
所有报价以先售为准。
我已经写了这段代码,但它没有得到正确的。 外部foreach循环运行17次,但应该只有两次,因为外部表只有两行

$xml = new DOMDocument();
$xml->validateOnParse = true;
$xml->loadHTMLFile($url);

$xpath = new DOMXPath($xml);

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

echo "<table border=2>";
$rows = $table->getElementsByTagName("tr");

foreach ($rows as $row) //there i only two rows. 
{
echo "<tr>";
  $cells = $row -> getElementsByTagName('td');

  foreach ($cells as $cell) 
  {
   echo "<td>";
   foreach ($cell->getElementsByTagName('table') as $innerTable )
   {
      foreach ( $innerTable->getElementsByTagName("tr") as $innerTrs)
      {
        foreach ( $innerTrs->getElementsByTagName('td') as $innerCell)
        {
            foreach ($innerCell->getElementsByTagName('a') as $a )
            {
               echo '<br><a href="'.GetMainBaseFromURL($url).$a->getAttribute('href').'">'.$a->nodeValue.'</a>';

              foreach ($a->getElementsByTagName('img') as $img )
                 echo '<br><a href="'.GetMainBaseFromURL($url).$a->getAttribute('href').'"> <img src="'.GetMainBaseFromURL($url).$img->getAttribute('src').'"></a>';
            }        
        }
      }
   }

   echo "</td>";  
  }
  echo "</tr>";
}
echo "</table>";
$xml=newDOMDocument();
$xml->validateOnParse=true;
$xml->loadHTMLFile($url);
$xpath=newdomxpath($xml);
$table=$xpath->query(“/*[@id='machine']”)->项(0);
回声“;
$rows=$table->getElementsByTagName(“tr”);
foreach($row作为$row)//在那里我只有两行。
{
回声“;
$cells=$row->getElementsByTagName('td');
foreach($cells作为$cell)
{
回声“;
foreach($cell->getElementsByTagName('table')作为$innerTable)
{
foreach($innerTable->getElementsByTagName(“tr”)作为$innerTrs)
{
foreach($innerTrs->getElementsByTagName('td')作为$innerCell)
{
foreach($innerCell->getElementsByTagName('a')作为$a)
{
回声“
”; foreach($a->getElementsByTagName('img')作为$img) 回声“
”; } } } } 回声“; } 回声“; } 回声“;
然后,如何使用PHPDOM文档打印网页中的html表格。 我是php dom新手

多谢各位。
非常感谢。

foreach循环会重复17次,因为您发布的HTML代码中有17个标记。 实际上,$rows=$table->getElementsByTagName(“tr”);提取树中任意深度的任何标记

要仅获得两个外部,您可以执行以下操作

$tbody=$table->childNodes

$outerTr=$tbody->childNodes

对$outerTr进行迭代的一种方法

您还可以构建一个Xpath表达式,以仅获取两个外部表达式


我没有测试您的代码,但是,在其他foreach中,请记住getElementsByTagName(“tr”)(或其他标记td,a..)的相同问题。

foreach循环会重复17次,因为您发布的HTML代码中有17个标记。 实际上,$rows=$table->getElementsByTagName(“tr”);提取树中任意深度的任何标记

要仅获得两个外部,您可以执行以下操作

$tbody=$table->childNodes

$outerTr=$tbody->childNodes

对$outerTr进行迭代的一种方法

您还可以构建一个Xpath表达式,以仅获取两个外部表达式


我没有测试您的代码,但是在其他foreach中,请记住getElementsByTagName(“tr”)(或其他标记td,a..)的相同问题。

如果您只想复制表,可以执行以下操作:

<?php
$xml = new DOMDocument();
$xml->validateOnParse = true;
$xml->loadHTMLFile($url);

$table = $xml->getElementById('machine');
echo $xml->saveXML($table);
?>

如果您只想复制表格,可以执行以下操作:

<?php
$xml = new DOMDocument();
$xml->validateOnParse = true;
$xml->loadHTMLFile($url);

$table = $xml->getElementById('machine');
echo $xml->saveXML($table);
?>

getElementsByTagName
适用于整个文档。文档有17个
tr
元素,因此无论这些元素放在何处,它都将返回它们

当您想要查找特定的
tr
元素,或者更具体地查找特定表中的图像时,我建议您让xpath完成大部分工作:

$xpath = new DOMXPath($xml);

$nodes =$xpath->query("//table[@id='machine']/tbody/tr/td/div/a/img");

echo 'Found ', $nodes->length, ":\n";

foreach($nodes as $node)
{
    $img = $node;
    $a = $node->parentNode;
    $aHref = $a->getAttribute('href');
    $imgSrc = $img->getAttribute('src');
    printf("Element:\n + href: %s;\n +- src: %s\n\n", $aHref, $imgSrc);
}
这将列出3个元素(不是2个)。你需要进一步决定放弃哪一个,但这会使它更容易输出:

Found 3:
Element:
 + href: /photos.php?id=7135&p=1;
 +- src: /class/class_Image.php?load=cGhvdG9zL0ExMTk0LmpwZ3wyNTB8MjUwfDF8

Element:
 + href: /photos.php?id=7135&p=2;
 +- src: /class/class_Image.php?load=cGhvdG9zL0ExMTk0XzEuanBnfDI1MHwyNTB8MXw=

Element:
 + href: /machine-print.php?id=7135;
 +- src: http://www.sterlingmachinery.com/images/quick_quote.jpg
另一个技巧:首先将数据规范化为类似数组的结构。然后可以使用数组生成输出。完成后,您可以将解析与输出分离,这将使您更容易实现目标

  • 将文档解析为数组
  • 根据需要修改该数组中的值(例如,
    GetMainBaseFromURL
  • 根据