简体   繁体   English

使用PHP的XML Xpath

[英]XML Xpath using PHP

Here is my XML: 这是我的XML:

<div class="main">  
    <div class="workshoplist-main">
        <div class="toggler pointer">
            <i class="icon-chevron-down"></i> 
            <span id="rpt_0_lblSectionHeader_0">Wednesday, March 18, 2015 (10:00 AM - 11:00 AM)</span> 
            <p>Description of March info</p>
        </div>
    </div>
    <div class="workshoplist-main">
        <div class="toggler pointer">
            <i class="icon-chevron-down"></i> 
            <span id="rpt_0_lblSectionHeader_1">Thursday, April 16, 2015 (10:00 AM - 11:00 AM)</span> 
            <p>Description of April info</p>
        </div>
    </div>
    <div class="workshoplist-main">
        <div class="toggler pointer">
            <i class="icon-chevron-down"></i> 
            <span id="rpt_0_lblSectionHeader_2">Friday, March 19, 2015 (10:00 AM - 11:00 AM)</span> 
            <p>Description of March info</p>
        </div>
    </div>  
</div>  

I want to look for the word March in the span element that contains lblSectionHeader in the id . 我想要在id中包含lblSectionHeaderspan元素中寻找单词March

The return value I would like is: 我想要的返回值是:

 Wednesday, March 18, 2015 (10:00 AM - 11:00 AM)
 Friday, March 19, 2015 (10:00 AM - 11:00 AM)

My code is: 我的代码是:

xpath("//div[contains(@class,'workshoplist-main') and //span[contains(@id,'lblSectionHeader')][text()='March']]");

I am getting no results. 我没有结果。 If anyone could help, that would be great. 如果有人可以帮助,那就太好了。

The following query works: 以下查询有效:

$html = <<<'EOF'
    ... Your HTML comes here ...
EOF;

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

$selector = new DOMXPath($doc);
$query = "//div[contains(@class,'workshoplist-main')]//span[contains(@id,'lblSectionHeader')][contains(text(), 'March')]";

foreach($selector->query($query) as $node) {
    // do something with that node
    var_dump($node);
}

You misused the and keyword in your query. 您在查询中滥用了and关键字。 If you want to select <span> tags below a <div> tag (regardless of the nesting level) then use //div//span , not //div and //span 如果要选择<span>标记下面的<div>标记(与嵌套级别无关),请使用//div//span ,而不要使用//div and //span

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

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