2013-04-06 7 views
0

Я пытаюсь выполнить поиск файла XML и вернуть все данные для записи, соответствующие заданным критериям. Вот что-то вроде меня сейчас, оно отлично работает, но я не могу понять, как получить значение других атрибутов в этой же записи.Получение значения атрибута из результата запроса DOMXPath?

Вот пример файла XML, который будет использоваться:

<routing> 
    <route> 
     <url>/homepage</url> 
     <file>/pages/home.php</file> 
    </route> 
</routing> 

А вот как я в поиске конкретной записи или записи в документ. Он находит их отлично, но как я могу получить данные из записи, которая была сопоставлена?

$qExp = '//route[url="/homepage"]'; 
    foreach($inst->query($qExp) as $key=>$node) { 
     print_r($node); 
     // echo $node->file->nodeValue; 
     // how would I do this? I can't seem to 
     // access specific attributes at all 
     // inside of the DOMXPath class 
    } 

DOMXPath объект будет храниться в $node, но как я могу использовать DOMXPath объект, чтобы получить другие значения атрибутов? Например, первая запись XML будет возвращена этим запросом, но как я могу получить значение атрибута file? Я знаю, что есть функция nodeValue, но она возвращает все значения поля вместе, и я не могу сортировать, какие части принадлежат к каким полям.

Заранее спасибо за любую помощь, это действительно меня прослушивало.

+0

Может быть, вы озадачены, потому что вы смешивать термины? 'file' является * not * атрибутом, а элементом. Вы обычно обращаетесь к нему, как описано в [Получить определенный дочерний тег из DOMElement в PHP] (http://stackoverflow.com/questions/3816806/get-a-specific-child-tag-from-a-domelement-in- PHP). Также угаданный '$ node-> file-> nodeValue' представляет собой смесь двух разных видов обхода: First SimpleXML, затем DOM. – hakre

+0

Еще одно неправильное мнение: '$ node' будет' DOMXPath', но это 'DOMNode'. – hakre

ответ

-1

Для приятного и простое решение, использовать simplexml:

$xml = simplexml_load_string($x); // assuming XML in $x 
$result = $xml->xpath("//route[url='/homepage']"); 

// loop 
foreach ($result as $r) echo $r->file,"<br />"; 

// direct access 
echo $result[0]->file,"<br />"; 

вживую увидеть демо[email protected]http://codepad.viper-7.com/ZRrUPl

+0

привет ??? почему голосом? Pls объясняет! – michi

Смежные вопросы