[英]PHP Query XML with xPath
我有一个如下的XML结构:
<Tickets>
<EventsPoints>
<Event ID="23">
<PerformanceName>U2</PerformanceName>
<EventDate>25/05/2012</EventDate>
<EventPrice>75.00</EventPrice>
</Event>
<Event ID="27">
<PerformanceName>Jedward</PerformanceName>
<EventDate>28/05/2012</EventDate>
<EventPrice>20.00</EventPrice>
</Event>
<Event ID="27">
<PerformanceName>Rolling Stones</PerformanceName>
<EventDate>03/12/2012</EventDate>
<EventPrice>80.00</EventPrice>
</Event>
</EventsPoints>
</Tickets>
基本上,我想在XML中搜索某个性能名称,例如“ U2”,然后返回整个XML块(即性能名称,事件日期和价格-全部以格式化的XML格式保存,并保存在单独的xml文件中)
这是我的PHP代码,但似乎无法正确提取数据:
$srcDom = new DOMDocument;
$srcDom->load('/var/www/html/xml/searchfile.xml');
$xPath = new DOMXPath($srcDom);
foreach ($srcDom->getElementsByTagName('Event') as $event) {
$dstDom = new DOMDocument('1.0', 'utf-8');
$dstDom->appendChild($dstDom->createElement('EventsPricePoints'));
$dstDom->documentElement->appendChild($dstDom->importNode($event, true));
$allEventsForVenue = $xPath->query(
sprintf(
'/Tickets/EventsPoints/Event/PerformanceName[.="U2"]'
)
);
foreach ($allEventsForVenue as $event) {
$dstDom->documentElement->appendChild($dstDom->importNode($event, true));
}
$dstDom->formatOutput = true;
$dstDom->save(sprintf('/var/www/html/xml/searchresults1.xml'));
}
当您需要父元素时,您的XPath将获得PerformanceName
元素。 更改为
/Tickets/EventsPoints/Event/PerformanceName[.="U2"]/..
要么
/Tickets/EventsPoints/Event[PerformanceName[.="U2"]]
或导入
$event->parentNode
另外,您不需要第一个foreach
。 删除它,然后移动将$dstDom
写入到XPath结果的代码中的代码。 看到http://codepad.org/zfOZXycZ
另请参阅:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.