一种未记录的方法(在我看来,这是一种技巧)来获取元素的值或属性
(但不能同时获取两者)而无需类型转换,可以使用函数 `current()`
<?php
$xml = new SimpleXMLElement(<<<'XML'
<foo>
<bar>1</bar>
<baz name="baz" />
<qux name="qux">3</qux>
</foo>
XML
);
var_dump([
'bar' => [
$xml->bar,
current($xml->bar),
],
'baz' => [
$xml->baz->attributes(),
current($xml->baz->attributes()),
],
'qux' => [
$xml->qux,
current($xml->qux),
$xml->qux->attributes(),
current($xml->qux->attributes()),
],
]);
?>
结果如下(重新格式化以缩短长度)
```
array(3) {
'bar' => array(2) {
[0] => class SimpleXMLElement#2 (1) {
public ${0} => string(1) "1"
}
[1] => string(1) "1"
}
'baz' => array(2) {
[0] => class SimpleXMLElement#5 (1) {
public $@attributes => array(1) {
...
}
}
[1] => array(1) {
'name' => string(3) "baz"
}
}
'qux' => array(4) {
[0] => class SimpleXMLElement#6 (2) {
public $@attributes => array(1) {
...
}
public ${0} => string(1) "3"
}
[1] => array(1) {
'name' => string(3) "qux"
}
[2] => class SimpleXMLElement#7 (1) {
public $@attributes => array(1) {
...
}
}
[3] => array(1) {
'name' => string(3) "qux"
}
}
}
```
这似乎将元素读取为数组,并只返回第一个属性的值,无论它是属性还是值。如第三个示例所示,这不可靠,尤其是当你解析来自外部来源的 XML 时,该来源可能包含或可能不包含你想要获取值的元素的属性。
我当然不建议任何人使用它,因为它没有记录,并且它只是巧合地起作用,因此它可能在将来未经通知的情况下中断。