繁体   English   中英

如何使用XPath获取这些值

[英]How to get these values with XPath

HTML

<table id='dg' border='0'  class="Table">
  <tr>
    <td class='text'>id.</td>
    <td class='text'>file</td>
    <td class='text'>alt</td>
  </tr>
  <tr>
    <td class='text'><input name='somename[]' type='hidden' value='1234'>
      1</td>
    <td class='text'><a href='#' onClick="javascript:openPopWindow('../../somefile.jpg');" ><img src='cms_thumb.php?imgsrc=somefile2.jpg' border='0' ></a></td>
    <td class='text'><input type='text' name='title[]' value='Value 1'></td>
  </tr>
  <tr>
    <td class='text'><input name='somename[]2' type='hidden' value='2345'>
      2</td>
    <td class='text'><a href='#' onClick="javascript:openPopWindow('../../somefile2.jpg');" ><img src='thumb.php?imgsrc=somefile2.jpg' border='0' ></a></td>
    <td class='text'><input type='text' name='title[]' value='Value 2'></td>
  </tr>
</table>

目的

需要获取img src文件名并获取name = title []的输入字段的值

我有多远

$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXpath($dom);

foreach ($dom->getElementsByTagName('tr') as $node) { 
    $img = $xpath->query('//img')->item(0); 
    $img = str_replace("\'","",$img->getAttribute('src'));
    $img = str_replace("cms_thumb.php?imgsrc=","",$img);
    echo $img.'<br>';
}

$ img只包含第一张图片,而不包含其他图像

尝试:

$html = <<<HTML
<table id='dg' border='0'  class="Table">
  <tr>
    <td class='text'>id.</td>
    <td class='text'>file</td>
    <td class='text'>alt</td>
  </tr>
  <tr>
    <td class='text'><input name='somename[]' type='hidden' value='1234'>
      1</td>
    <td class='text'><a href='#' onClick="javascript:openPopWindow('../../somefile.jpg');" ><img src='cms_thumb.php?imgsrc=somefile2.jpg' border='0' ></a></td>
    <td class='text'><input type='text' name='title[]' value='Value 1'></td>
  </tr>
  <tr>
    <td class='text'><input name='somename[]2' type='hidden' value='2345'>
      2</td>
    <td class='text'><a href='#' onClick="javascript:openPopWindow('../../somefile2.jpg');" ><img src='thumb.php?imgsrc=somefile2.jpg' border='0' ></a></td>
    <td class='text'><input type='text' name='title[]' value='Value 2'></td>
  </tr>
</table>
HTML;


$doc = new DOMDocument();
$doc->loadHTML($html);


foreach($doc->getElementsByTagName("td") as $td){
    foreach($td->getElementsByTagName("img") as $img){
        $arr_img[] = array(
            "img" => $img->getAttribute("src"),
        );
    }
    foreach($td->getElementsByTagName("input") as $name){
        if ($name->getAttribute("name")==="title[]"){
            $arr_value[] = array(
                "value" => $name->getAttribute("value")
            );
        }
    }
}

var_dump($arr_img); // In this array will be img src's
var_dump($arr_value); // In this array will be values of input elements which name equal to title[]

var_dump输出将是=>

array(2) {
  [0]=>
  array(1) {
    ["img"]=>
    string(34) "cms_thumb.php?imgsrc=somefile2.jpg"
  }
  [1]=>
  array(1) {
    ["img"]=>
    string(30) "thumb.php?imgsrc=somefile2.jpg"
  }
}

array(2) {
  [0]=>
  array(1) {
    ["value"]=>
    string(7) "Value 1"
  }
  [1]=>
  array(1) {
    ["value"]=>
    string(7) "Value 2"
  }
}

使用DOMXPath::query()的context参数和相对查询,并检查是否存在img和input元素(在第一个表行中不是这种情况):

$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXpath($dom);

foreach ($dom->getElementsByTagName('tr') as $node) { 
    $img = $xpath->query('.//img', $node)->item(0);
    $input = $xpath->query('.//input[@name="title[]"]', $node)->item(0);
    if ($img && $input) {
        echo $img->getAttribute('src'), ' - ';
        echo $input->getAttribute('value'), '<br>';
    }
}

这将在每个表行中的任何位置搜索第一个<img><input name="title[]">元素。 如果表结构总是如上所示,您可以使用更明确的XPath优化脚本:

$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXpath($dom);

$table = $dom->getElementById('dg');
$images = $xpath->query('tr/td/a/img', $table);
$inputs = $xpath->query('tr/td/input[@name="title[]"]', $table);

要获取属性,请并行迭代$images$inputs ,例如使用MultipleIterator

$iterator = new MultipleIterator();
$iterator->attachIterator(new IteratorIterator($images));
$iterator->attachIterator(new IteratorIterator($inputs));
foreach ($iterator as $items) {
    $src = $items[0]->getAttribute('src');
    $value = $items[1]->getAttribute('value');
    echo $src, ' - ', $value, '<br>';
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM