gpt4 book ai didi

php - XML 计数元素,如果 id 存在则递增 1

转载 作者:可可西里 更新时间:2023-10-31 23:06:44 24 4
gpt4 key购买 nike

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

关于php - XML 计数元素,如果 id 存在则递增 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16635332/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com