2017-12-09 18 views
0

PHP에서 DOMXPath의 기본 사항을 이해하려고합니다. 아래에서 시작하는 XML 파일이 있습니다. PHP DOMXPath 노드 이름별로 쿼리가 없습니다.

<?xml version="1.0"?> 
<ListFinancialEventsResponse xmlns="http://mws.amazonservices.com/Finances/2015-05-01"> 
    <ListFinancialEventsResult> 
    <FinancialEvents> 
     <ShipmentEventList> 
     <ShipmentEvent> 

나는 몇 가지 XPath 쿼리 시도하지만 어느 작품 아래의 PHP를 사용하여 FinancialEvents 태그를 얻기 위해 노력하고있어.

$file = file_get_contents('file.xml'); 
    $dom = new DOMDocument(); 
    $dom->loadXML($file); 

    $xpath = new DOMXPath($dom); 
    $xpath->registerNamespace('m','http://mws.amazonservices.com/Finances/2015-05-01'); 

    $events = $xpath->query('FinancialEvents'); // Attempt 1 
    $events = $xpath->query('m:FinancialEvents');// Attempt 2 

문서에 따르면, 이들은 'FinancialEvents'라는 이름의 모든 노드를 반환해야합니다. 나는 아래의 xpath 쿼리를 사용하면 작동한다는 것을 알고있다.

$events = $xpath->query('//m:FinancialEvents'); 

내 첫 번째 질문은 왜 작동하지 않는가? 요소가 없습니다 <FinancialEvents>도 같은 이름의 노드입니까?

감사

답변

0

테스트하지하지만 당신은 시도 할 수 :

$query='//ListFinancialEventsResult/FinancialEvents'; 
$events=$xp->query($query); 
if(!empty($events) && $events->length > 0){ 
    foreach($events as $event){ 
     echo $event->nodeValue; 
    } 
} 

나는 노드 목록을 반환하지 않는 쿼리의 처음 몇인지 의심 효과적으로 루트 수준에서 노드 FinancialEvents을 찾기 위해 노력하고 있기 때문에 ~ 쿼리에 대한 참조 노드 (DOMNode ListFinancialEventsResult)를 제공하면 작동 할 것입니다.