首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php Xpath使用innerHTML标记获取innerHTML

php Xpath使用innerHTML标记获取innerHTML
EN

Stack Overflow用户
提问于 2011-10-23 01:25:39
回答 3查看 2K关注 0票数 2

我有一个HTML文件,格式如下:

代码语言:javascript
复制
<p class="p1">subject</p>
<p class="p2">detail <span>important</span></p>

<p class="p1">subject</p>
<p class="p2">detail<span>important</span></p>

我编写了一段PHP代码来自动获取每个p1,并将它们插入到我的mysql表中。

这是我的代码:

代码语言:javascript
复制
$doc = new DOMDocument();

$doc->loadHTMLFile("file.html");

$xpath = new DomXpath($doc);

$subject = $xpath->query('//p');


for ($i = 0 ; $i < $subject->length-1 ; $i ++) {

if ($subject->item($i)->getAttribute("class") == "p1")
    echo $subject->item($i)->nodeValue;
}
...

这不是我的完整代码,但问题是:

代码语言:javascript
复制
echo $subject->item($i)->nodeValue;

这给了我不带<span></span>标记的<p>detail important</p>

将跨度标记放在细节的“重要”部分是非常重要的。有没有什么函数可以做到这一点而不会头疼呢?

提前感谢

EN

回答 3

Stack Overflow用户

发布于 2011-10-30 04:27:27

我找到了问题的答案:)感谢SimpleHTMLDOM

代码语言:javascript
复制
foreach($html->find('p') as $element) {

 switch ($element->class) {
      case 'p1':
                     $subject = $element;
                     break;
      case 'p2': $detail .= html_entity_decode($element);

 }

}

诀窍在于:

代码语言:javascript
复制
html_entity_decode($element);
票数 1
EN

Stack Overflow用户

发布于 2011-10-23 02:28:12

每当我需要解析HTML时,我都会通过SimpleHTMLDOM运行它:

http://simplehtmldom.sourceforge.net/

我推荐使用1.11版。由于各种原因,1.5相当糟糕。

票数 0
EN

Stack Overflow用户

发布于 2020-03-13 23:45:41

旧的查询,但有一个一行。操作员应该使用:

$subject = $xpath->query('//p/*');

然后:

echo $doc->saveHtml($subject->item($i));

使用*,你将得到内部的html (没有换行段落标签);如果没有*,你将得到带有换行段落的html;

完整示例:

代码语言:javascript
复制
$html = '<div><p>ciao questa è una <b>prova</b>.</p></div>';
$dom = new DomDocument($html);
@$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$node = $xpath->query('.//div/*'); // with * you get inner html without surrounding div tag; without * you get inner html with surrounding div tag
$innerHtml = $dom->saveHtml($node);
var_dump($innerHtml);

输出:<p>ciao questa è una <b>prova</b>.</p>

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

https://stackoverflow.com/questions/7861320

复制
相关文章

相似问题

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