我正在尝试检索课程信息,以显示课程标题、说明和位置,例如,他们的文本包含三月,而忽略四月的课程。
这是我的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>
元素的子元素中提取数据)中遇到问题,请显示您尝试了什么代码,结果是什么,以及您希望该段代码得到什么结果(您已经显示了所需的总体结果)。