php - XML count elements, If id exists increment by one -
what trying count elements under root element. check if 1 id on same level has id value. when occurs needs increment one.
the code
public function _generate_id() { $id = 0; $xpath = new domxpath($this->_dom); do{ $id++; } while($xpath->query("/*/*[@id=$id]")); return $id; }
example xml
<?xml version="1.0"?> <catalog> <book id="0"> <author>gambardella, matthew</author> <title>xml developer's guide</title> <genre>computer</genre> <price>44.95</price> <publish_date>2000-10-01</publish_date> <description>an in-depth @ creating applications xml.</description> </book> <book id="1"> <author>ralls, kim</author> <title>midnight rain</title> <genre>fantasy</genre> <price>5.95</price> <publish_date>2000-12-16</publish_date> <description>a former architect battles corporate zombies, evil sorceress, , own childhood become queen of world.</description> </book> </catalog>
you can use following xpath query maximum value of id attribute:
$result = $xpath->query('/*/*[not(../*/@id > @id)]/@id');
in function can return value incremented 1
:
return intval($result->item(0)->nodevalue) + 1;
update: can increment operation using xpath well. note domxpath::evaluate()
:
return $xpath->evaluate('/*/*[not(../*/@id > @id)]/@id + 1'); |------- +1 in xpath
this give 2
- double. suggest convert integer before returning result:
return (integer) $xpath->evaluate('/*/*[not(../*/@id > @id)]/@id + 1');
Comments
Post a Comment