gpt4 book ai didi

PHP SimpleXMLIterator

转载 作者:行者123 更新时间:2023-12-04 05:12:26 25 4
gpt4 key购买 nike

我正在使用 SimpleXMLIterator 来解析一些 XML。
做一个 print_r 显示从 XML 创建的 SimpleXMLIterator 对象是这样的:
{

[@attributes] => Array
(
[id] => abc
[type] => a
[timestamp] => 2001-12-12
)

[place] => US
[name] => Pete
[dob] => SimpleXMLIterator Object
(
[dd] => 03
[mm] => 05
[yyyy] => 1973
)

}

它还包含一个 dob SimpleXMLIterator 对象 - 即 XML 标记的子元素。

我使用以下代码迭代此对象,该代码是递归的,因为我无法确定每个 XML 标记的深度:
function _prepareSimpleXMLIteratorObj(SimpleXMLIterator $xmlIterator) {

foreach ($xmlIterator as $key => $value){
// Count returns the number of children
if ($value->count() > 0) {
$this->_prepareSimpleXMLIteratorObj($value);
} else {
$this->assocArray[$key] = (string)$value;
}
}
}

assocArray 是类的成员变量。
这将从对象生成一个关联数组。

问题是当我使用 $value->hasChildren() 而不是 $value->count() 我得到错误,即使 $value->count() 为 dob 返回 3?任何想法我做错了什么?
另外如果是做
if (($value instanceof SimpleXMLIterator))

我得到了错误,即使 dob 显然是一个 SimpleXMLIterator 对象?

这种方法有效,但我只是想知道 hasChildren 和 instanceof?

这是示例 XML
<tag id="abc" type="a" timestamp="2001-12-12">
<place>US</place>
<name>Pete</name>
<dob>
<dd>03</dd>
<mm>05</mm>
<yyyy>1973</yyyy>
</dob>
</tag>

谢谢

最佳答案

hasChildren 方法对您不起作用,因为它没有按照您的想法行事。关键在于文档中的这一行:

This method checks whether the current SimpleXMLIterator element has sub-elements.



当它说 “当前”这意味着 返回的实际 SimpleXMLElement当前()就像使用 foreach 进行迭代一样。记住 SimpleXMLIterator 被设计成一个“迭代器”

因此,当您的算法到达 dob 节点并调用 $value->hasChildren() 时,它真正检查项目 $value->current() 是否有任何子项。因此,在您的示例中,它检查节点/tag/dob/dd 是否有任何子节点,而它没有。

关于PHP SimpleXMLIterator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14731752/

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