首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用DOM解析器php获取多个元素

使用DOM解析器php获取多个元素
EN

Stack Overflow用户
提问于 2014-07-03 21:16:20
回答 1查看 152关注 0票数 1

我想使用php和简单的HTML解析器来分析页面。

HTML标记如下:

代码语言:javascript
复制
<div class="question">
    <b>My-title1</b><br />
    <label class="false"><input type="radio" name="q1" value="0" />1. <span >text-1</span></label><br />
    <label class="true"><input type="radio" name="q1" value="1" />2. <span >text-2</span></label><br />
    <label class="false"><input type="radio" name="q1" value="0" />3. <span >text-3</span></label><br />
    <label class="false"><input type="radio" name="q1" value="0" />4. <span >text-4</span></label><br />
</div>

现在,我使用这段代码获取My-title值:

代码语言:javascript
复制
foreach($html->find('b') as $e) 
{
    echo $e->innertext . '<br>';
}

但我想要更多..。

我想把text-1转到text-4,并找到并过滤其中的哪一个有class=true

因此,我的最后输出必须是:

代码语言:javascript
复制
my-title1
text-1
*text-2
text-3
text-4
my-title2
text-1
text-2
text-3
*text-4
...

我怎么能用这个?这是我的方式,还是我必须使用另一种解决方案来做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-04 01:02:46

是的,您绝对需要使用另一个解决方案来获得值。首先,由于您需要另一组包含titletext的值,因此需要扩展搜索范围,即针对父元素<div class="question">

这一定是你的出发点。从那里开始,很明显你需要循环然后处理孩子们。考虑一下这个例子:

代码语言:javascript
复制
include 'simple_html_dom.php';
// sample markup
$markup = '
<div class="question">
    <b>My-title1</b><br />
    <label class="false"><input type="radio" name="q1" value="0" />1. <span>text-1</span></label><br />
    <label class="true"><input type="radio" name="q1" value="1" />2. <span>text-2</span></label><br />
    <label class="false"><input type="radio" name="q1" value="0" />3. <span>text-3</span></label><br />
    <label class="false"><input type="radio" name="q1" value="0" />4. <span>text-4</span></label><br />
</div>
<div class="question">
    <b>My-title2</b><br />
    <label class="false"><input type="radio" name="q1" value="0" />1. <span>text-1</span></label><br />
    <label class="false"><input type="radio" name="q1" value="1" />2. <span>text-2</span></label><br />
    <label class="false"><input type="radio" name="q1" value="0" />3. <span>text-3</span></label><br />
    <label class="true"><input type="radio" name="q1" value="0" />4. <span>text-4</span></label><br />
</div>
';

$html = str_get_html($markup);
// get each `question class` parent
foreach($html->find('div[class="question"]') as $question_tag) {
    // get the title
    $title = $question_tag->children(0)->innertext; // title tag child
    echo $title . '<br/>';
    // texts inside span
    foreach($question_tag->find('label input span') as $span) {
        if($span->parent()->class == 'true') {
            echo '*';
        }
        echo $span->innertext . '<br/>';
    }
}

应该产生这样的结果:

代码语言:javascript
复制
My-title1
text-1
*text-2
text-3
text-4
My-title2
text-1
text-2
text-3
*text-4
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24563407

复制
相关文章

相似问题

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