首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP DOMDOCUMENT

PHP DOMDOCUMENT
EN

Stack Overflow用户
提问于 2014-06-13 11:53:14
回答 1查看 374关注 0票数 0

在这里,我从我需要的网页(= 'titre')中回显类元素,但是如何回显它们的值呢?似乎不能让它起作用。

代码语言:javascript
复制
$html = file_get_contents('http://www.spoofedwebpage.int/notice/search/wanted');
$dom = new DOMDocument;
$dom->loadHTML($html);
$dom->preserveWhiteSpace = false;
$divs = $dom->getElementsByTagName('div');  // Sample to get div element
$spans = $dom->getElementsByTagName('span');  // Sample to get div element


$i = 0;
while($span = $spans->item($i++))
{
    $class_node = $span->attributes->getNamedItem('class');
    if($class_node)
    {
        if($class_node->value == "titre")
        {   
        echo "Class is : " . $span->attributes->getNamedItem('class')->value . 
"<br>";
    }
}
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-13 12:37:46

类属性有点特殊,因为它们是令牌列表(由空格分隔的几个类名),但是我建议您使用Xpath来获取节点:

代码语言:javascript
复制
$html = <<<'HTML'
  <div class="titre foo">abc</div>
  <span class="titre bar">def</span> 
  <div class="bar">hij</div>
HTML;

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

$expression = '//*[(self::div or self::span) and contains(concat(" ", normalize-space(@class), " "), " titre ")]';

foreach ($xpath->evaluate($expression) as $node) {
  echo "Text is: ", $node->nodeValue, "\n";
}

输出:https://eval.in/162248

代码语言:javascript
复制
Text is: abc
Text is: def

关于这句话:

选择文档中的任何元素.

//*

..。如果是divspan ..。

//*[(self::div or self::span)]

..。class属性包含一个类名titre

//*[ (self::div or self::span) and contains(concat(" ", normalize-space(@class), " "), " titre ") ]

normalize-space()接受一个字符串并将所有空白组转换为单个空格。它也从字符串的开头和结尾剥离空白空间。concat用于向规范化字符串的开头和结尾添加一个空格。结果是一个类名字符串,如空格、CLASS_ONE空间、CLASS_TWO空间。这使得它能够查找像空间CLASS_ONE空间这样的子字符串。

顺便说一句你确定你在找titre而不是title

提示最初的答案选择了类属性,如果您对它感兴趣,请参阅history

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24204692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档