将xPath变为变量

时间:2013-01-02 15:46:45

标签: php xml xpath domdocument

如何将输出转换为变量,以便我可以交叉引用它以查看它是否与我设置的另一个变量匹配

foreach ($nodes as $i => $node) {
  echo $node->nodeValue;
}

我知道这是不正确的,但不会起作用,但是:

foreach ($nodes as $i => $node) {
  $target = $node->nodeValue;
}

$match = "some text"

if($target == $match) {
  // Match - Do Something
} else {
  // No Match - Do Nothing
}

实际上这解决了我的问题,但也许不是正确的方法:

libxml_use_internal_errors(true);
$dom = new DomDocument;
$dom->loadHTMLFile("http://www.example.com");
$xpath = new DomXPath($dom);
$nodes = $xpath->query("(//tr/td/a/span[@class='newprodtext' and contains(translate(text(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'adidas')])[1]");
foreach ($nodes as $i => $node) {

echo $node->nodeValue, "\n";
$target[0] = $node->nodeValue;
}

$match = "adidas";

if($target == $match) {
    // Match
} else {
    // No Match
}

1 个答案:

答案 0 :(得分:1)

你的问题更多的是关于循环的一般理解,为数组赋值和使用 if 条件使用php而不是使用xpath。

  • 在您的foreach循环中,您将$node nodeValue分配到$target数组中的同一索引,$target将永远只有一个值(最后一个)
  • if条件语句中,您要比较array(或null,如果$nodes没有项目,那么您可能要声明{{ 1}}首先)反对字符串' adidas',这永远不会成真。

你可能想做类似的事情:

$target

<强>更新

我看到这个xpath表达式是在另一个answer中给你的,可能已经匹配了,所以你只需要检查$matched = false; $match = 'adidas'; foreach ($nodes as $i => $node) { $nodeValue = trim(strip_tags($node->textContent)); if ($nodeValue === $match) { $matched = true; break; } } if ($matched) { // Match } else { // No Match } 的{​​{3}}属性

$nodes