How can i get attribute from xpath?

How to get each node's attribute via xpath

  • How can I get each node's attribute via xpath? For instance, book.xml, <?xml version="1.0" encoding="UTF-8" ?> <records timestamp="1264777862"> <record></record> <record></record> <record timestamp="1264777000"></record> <record></record> </records> php, <?php $doc = new DOMDocument; $doc->load('book.xml'); $xpath = new DOMXPath($doc); # get and output "<entry>" elements $x = $doc -> getElementsByTagName('record'); # Count the total feed with xpath. $total = $x->length; # the query is relative to the records node $query = 'string(/records/@timestamp)'; for ($i=0; $i<$total; $i++) { $timestamp = $xpath->evaluate($query,$x->item($i)); echo $timestamp ."<br/>"; } ?> result (which it loops the first node only), 1264777862 1264777862 1264777862 1264777862 But I want to get, 1264777862 1264777000 I have followed the question and answer from http://stackoverflow.com/questions/2162986/xpath-get-root-node-attributes and modified from it. Or maybe there are better methods? EDIT: xml, <?xml version="1.0" encoding="UTF-8" ?> <records> <record timestamp="1264777862">A</record> <record>B</record> <record timestamp="1264777000">C</record> <record>D</record> </records> with this, for ($i=0; $i<$total; $i++) { $value = $x->item($i)->childNodes->item(0)->nodeValue; $timestamp = $xpath->evaluate($query,$x->item($i)); echo $value.': '.$timestamp ."<br/>"; } I get this result, A: 1264777862 B: 1264777862 C: 1264777862 D: 1264777862 but this is the result I am after, A: 1264777862 B: C: 1264777862 D: EDIT: a test, $nodes = $xpath->query('//records/record'); foreach($nodes as $node) { $value = $node->nodeValue; $timestamp = $node->getAttribute('timestamp'); echo $value .': '."<br/>"; } result, A: B: C: D:

  • Answer:

    One method: $nodes = $xpath->query('//records[@timestamp]'); foreach($nodes as $node) { $timestamp = $node->getAttribute('timestamp'); } Though, you've mixed record and records in your example, so I'm not sure which you're using in reality. update: This code works for me: <?php $xml = <<<EOL <?xml version="1.0" encoding="UTF-8" ?> <records> <record timestamp="1264777862">A</record> <record>B</record> <record timestamp="1264777000">C</record> <record>D</record> </records> EOL; $x = new DOMDocument(); $x->loadXML($xml); $xp = new DOMXpath($x); $nodes = $xp->query('//records/record'); foreach($nodes as $node) { echo $node->nodeValue, ': ', $node->getAttribute('timestamp'), "\n"; } and outputs A: 1264777862 B: C: 1264777000 D:

lauthiamkok at Stack Overflow Visit the source

Was this solution helpful to you?

Related Q & A:

Just Added Q & A:

Find solution

For every problem there is a solution! Proved by Solucija.

  • Got an issue and looking for advice?

  • Ask Solucija to search every corner of the Web for help.

  • Get workable solutions and helpful tips in a moment.

Just ask Solucija about an issue you face and immediately get a list of ready solutions, answers and tips from other Internet users. We always provide the most suitable and complete answer to your question at the top, along with a few good alternatives below.