微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – XML计数元素,如果id存在增加1

我想要做的是计算根元素下的元素.然后检查同一级别上的一个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>

解决方法:

您可以使用以下xpath查询获取id属性的最大值:

$result = $xpath->query('/*/*[not(../*/@id > @id)]/@id');

在您的函数中,您可以返回此值增加1:

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 举报,一经查实,本站将立刻删除。