簡體   English   中英

使用xPath的PHP查詢XML

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM