【问题标题】:Simple HTML DOM Parser PHP简单的 HTML DOM 解析器 PHP
【发布时间】:2015-09-29 18:10:53
【问题描述】:

我正在尝试使用“Simple HTML DOM Parser”选择 html 页面的特定部分。

到目前为止,我的代码可以正常工作,但它返回了很棒的 complete 文本,但我只想显示单个 P BARCODE[pb] 行。

我的(工作的)PHP 代码如下;

$homepage = file_get_html('http://example.com/SomeTextPage');

foreach($homepage->find('text') as $element) 
       echo $element->innertext . '<br>'; // line 29

这会在我的页面上返回以下内容(这是视图源显示);

<HTML>
<BODY>
EXP DATE[p43]=12-31-97<BR>
PCODE1[p44]=-<BR>
PCODE2[p45]=-<BR>
PCODE3[p46]=0<BR>
P TYPE[p47]=1<BR>
TOT CHKOUT[p48]=56<BR>
TOT RENWAL[p49]=17<BR>
CUR CHKOUT[p50]=3<BR>
HOME LIBR[p53]=0000<BR>
PMESSAGE[p54]=<BR>
MBLOCK[p56]=-<BR>
REC TYPE[p80]=p<BR>
RECORD #[p81]=110220<BR>
REC LENG[p82]=1126<BR>
CREATED[p83]=01-09-97<BR>
UPDATED[p84]=06-05-97<BR>
REVISIONS[p85]=139<BR>
AGENCY[p86]=1<BR>
CL RTRND[p95]=0<BR>
MONEY OWED[p96]=$1.35<BR>
BLK UNTIL[p101]=  -  -  <BR>
CUR ITEMA[p102]=0<BR>
CUR ITEMB[p103]=0<BR>
PIUSE[p104]=0<BR>
OD PENALTY[p105]=0<BR>
ILL CHKOUT[p122]=3<BR>
PATRN NAME[pn]=Jackson, Richard<BR>
ADDRESS[pa]=322 San Diego St<BR>
ADDRESS2[ph]=El Cerrito, CA 99999<BR>
TELEPHONE[pt]=510-555-1212<BR>
UNIV ID[pu]=111111111<BR>
P BARCODE[pb]=21913000482538<BR>
</BODY>
</HTML>

我想我需要选择第 32 行 &lt;br&gt; 或更重要的是 [P BARCODE[pb]] 行 - 这可能吗?

[P BARCODE[pb]] 行并不总是第 32 行,但 [P BARCODE[pb]] 文本永远不会改变。

也许我用错了方法?

欢迎任何帮助或建议。

【问题讨论】:

  • 我会试试$homepage-&gt;find('text')[31],还是太容易了?
  • 第 32 行是否已修复
  • @MrLister 不起作用。我得到Notice: Trying to get property of non-object in C:\xampp\... on line 29。第 29 行是我的回声
  • @Irfan 说得很好,不,它有时会在第 31 行和第 32 行之间发生变化。但文本 [P BARCODE[pb] 永远不会改变。

标签: php html dom


【解决方案1】:

您想尝试使用正则表达式吗?

$subject = 'P BARCODE[pb]=21913000482538<BR>';
$pattern = '/P\sBARCODE\[pb\]=([0-9]*)<BR>/'; 
preg_match($pattern, $subject, $matches); 
print_r($matches);

【讨论】:

    【解决方案2】:
    $var = $element->innertext;
    $array = explode('<br>', $var);
    echo $array[31];
    

    【讨论】:

    • 感谢@Irfan,但这不起作用。我得到Notice: Undefined offset: 31 in C:\xampp... on line 32。第 32 行是echo $array[31];。 $array 的 var_dump 显示 array(2) { [0]=&gt; string(1) " " [1]=&gt; string(0) "" }
    【解决方案3】:

    这样不行,将每一行文本包装在 &lt;span&gt; 中,这样您就可以单独访问它们。

    貌似还有一个选择,我想参考this的回答

    【讨论】:

    • 谢谢,但我无权访问外部 URL 以将文本格式化为 &lt;span&gt; 标签
    猜你喜欢
    • 2012-01-17
    • 1970-01-01
    • 2015-02-14
    • 2016-07-30
    • 1970-01-01
    • 2013-03-23
    • 2014-01-15
    • 2011-08-27
    相关资源
    最近更新 更多