在PHP中使用xpath在XML文件中搜索属性会返回一个空数组

时间:2018-12-03 21:02:13

标签: php xml xpath

我无法从此XML文件中提取“ ST1”的到达时间。

我正在使用的xml文件在这里:

<timetable version="2.2" xmlns="http://www.railml.org/schemas/2013"  id="timetable">
    <timetablePeriods>
        <timetablePeriod startDate="2001-12-24Z" endDate="2099-12-26Z" id="SCHS1" description="Monday to Friday"/>
    </timetablePeriods>
    <operatingPeriods>
        <operatingPeriod timetablePeriodRef="SCHS1" startDate="2001-12-24Z" endDate="2099-12-25Z" id="opS1" description="JS1"/>
    </operatingPeriods>
    <trainParts>
        <trainPart trainLine="JS1" trainNumber="S1" timetablePeriodRef="SCHS1" id="TS1_S1_1" description="JS1">
            <formationTT formationRef="fTS1"/>
            <operatingPeriodRef ref="opS1"/>
            <ocpsTT>
                <ocpTT ocpRef="ST1" ocpType="stop">
                    <times arrival="01:30:00" departure="01:30:30" scope="scheduled"/>
                    <sectionTT>
                        <trackRef dir="down" ref="SEC1634"/>
                        <trackRef dir="down" ref="SEC1378"/>
                    </sectionTT>
                </ocpTT>
                <ocpTT ocpRef="ST2" ocpType="stop">
                    <times arrival="01:35:00" departure="01:35:00" scope="calculated"/>
                    <sectionTT>
                        <trackRef dir="down" ref="SEC1370"/>
                        <trackRef dir="down" ref="SEC1327"/>
                        <trackRef dir="down" ref="SEC2850"/>
                        <trackRef dir="down" ref="SEC2837"/>
                        <trackRef dir="down" ref="SEC1336"/>
                    </sectionTT>
                </ocpTT>
                <ocpTT ocpRef="ST3" ocpType="stop">
                    <times arrival="01:38:00" departure="01:38:00" scope="calculated"/>
                    <sectionTT>
                        <trackRef dir="down" ref="SEC1385"/>
                    </sectionTT>
                </ocpTT>
            </ocpsTT>
        </trainPart>
    </trainParts>
</timetable>

从网上的一些建议中,我正在使用此xpath查询来尝试获取包含属性“ ST1”的XML,但是它一直在返回空数组。

<?php 

$xml = simplexml_load_file('filepath_to_xml.xml') or die("Cannot find file");

$timetableStartStation = $xml->xpath('//timetable/trainParts/trainPart/ocpsTT/ocpTT[@ocpRef="ST1"]');
$timetableEndStation = $xml->xpath('//timetable/trainParts/ocpsTT/ocpTT[@ocpRef="ST3"]/parent::*');

print_r($timetableStartStation);

?>

但是,print_r()继续打印

Array()

没有别的。绝对可以正确加载xml文件,因为使用$ xml变量执行print_r会按预期方式打印完整的simpleXMLElement。

我的xpath语句是否有问题,或者我是否需要使用另一种方法使用站名来分隔xml块?

0 个答案:

没有答案