我想要做的是计算根元素下的元素.然后检查同一级别上的一个id是否具有id值.发生这种情况时,需要增加1.
public function _generate_id()
{
$id = 0;
$xpath = new DOMXPath($this->_dom);
do{
$id++;
} while($xpath->query("/*/*[@id=$id]"));
return $id;
}
例如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 look at creating applications
with 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,
an evil sorceress, and her own childhood to become queen
of the world.</description>
</book>
</catalog>
解决方法:
$result = $xpath->query('/*/*[not(../*/@id > @id)]/@id');
return intval($result->item(0)->nodeValue) + 1;
更新:您也可以使用XPath执行增量操作.注DOMXPath::evaluate()
:
return $xpath->evaluate('/*/*[not(../*/@id > @id)]/@id + 1');
|------- +1 in xpath
这将给你2 – 但作为一个双.我建议在返回结果之前转换为整数:
return (integer) $xpath->evaluate('/*/*[not(../*/@id > @id)]/@id + 1');
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。