PHP Xpath无效表达式


PHP Xpath Invalid Expression

我正在尝试检索课程信息,以显示课程标题、说明和位置,例如,他们的文本包含三月,而忽略四月的课程。

这是我的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> 
        </div>
        <div class="accordion-element">
            <div class="element">
                <p>Course title: Math 100</p>
                <p>Description: Math</p>
                <p>Location: SSD1</p>                   
            </div>
        </div>
        <div class="toggler pointer">
            <i class="icon-chevron-down"></i> 
            <span id="rpt_0_lblSectionHeader_0a">Wednesday, April 18, 2015 (10:00 AM - 11:00 AM)</span> 
        </div>
        <div class="accordion-element">
            <div class="element">
                <p>Course title: English 100</p>
                <p>Description: English</p>
                <p>Location: BBD1</p>                   
            </div>
        </div>
        <div class="toggler pointer">
            <i class="icon-chevron-down"></i> 
            <span id="rpt_0_lblSectionHeader_0b">Thursday, March 19, 2015 (10:00 AM - 11:00 AM)</span> 
        </div>
        <div class="accordion-element">
            <div class="element">
                <p>Course title: History 100</p>
                <p>Description: History</p>
                <p>Location: ADD</p>                    
            </div>
        </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> 
        </div>
        <div class="accordion-element">
            <div class="element">
                <p>Course title: Math 105</p>
                <p>Description: Math</p>
                <p>Location: SSD2</p>                   
            </div>
        </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> 
        </div>
        <div class="accordion-element">
            <div class="element">
                <p>Course title: Chemistry 100</p>
                <p>Description: Chemistry</p>
                <p>Location: ADD</p>                    
            </div>
        </div>
    </div>  
</div>  

这是我用PHP编写的XPATH:

$details  = $node->xpath("//div[@class='toggler pointer']/span[contains(@id,'lblSectionHeader')][contains(text(), 'March')]/following-sibling::/*"); 

我想看到的结果是:

Wednesday, March 18, 2015 (10:00 AM - 11:00 AM)
   Course title: Math 100
   Description: Math
   Location: SSD1
Thursday, March 19, 2015 (10:00 AM - 11:00 AM)
   Course title: History 100
   Description: History
   Location: ADD

不显示任何四月课程

问题是我拿不到

 <div class="element"> 

检索课程、描述、位置的值

following-sibling::后面不能紧跟/,因此应该会出现错误。如果你看到一个错误,你应该告诉我们,而不是忽略这个线索。您可以将以下同级零件更改为../following-sibling::*,但您会选择比您想要的多得多的零件。

我认为你需要的是首先选择具有相关日期的跨度,就像你所做的那样:

$details  = $node->xpath("//div[@class='toggler pointer']/
  span[contains(@id,'lblSectionHeader')][contains(text(), 'March')]");

然后对它们进行迭代,对于每个跨度,选择

"(../following-sibling::div[@class='element'])[1]"

"(following::div[@class='element'])[1]"

任何一个都将为您提供相关的div元素,您可以从中选择每个<p>子元素。

如果您在最后一步(从<p>元素的子元素中提取数据)中遇到问题,请显示您尝试了什么代码,结果是什么,以及您希望该段代码得到什么结果(您已经显示了所需的总体结果)。