我需要以特定方式打印任意SimpleXML 对象,并对属性节点进行特殊处理。
问题是 SimpleXML 元素和属性似乎使用完全相同的类,属性节点甚至假装支持attributes()
方法,而 SimpleXML 隐藏了它的内部,所以似乎没有任何方法可以告诉节点类型(缺少生成 XML并重新分析它)。
两者都给出相同的结果:
$element = new SimpleXMLElement('<foo>test</foo>');
echo $element;
print_r($element);
$element = new SimpleXMLElement('<foo attr="test" />');
echo $element['attr'];
print_r($element['attr']);
是否有允许在 SimpleXML 中识别节点类型的隐藏属性/方法?等效于 DOM$node->nodeType
或$node instanceof DOMAttr
? (我不能改用 DOM,对 SimpleXML 的支持是核心要求)。