如何使用PHP迭代驻留在树的多个层次上的名称空间XML?

如何使用PHP迭代驻留在树的多个层次上的名称空间XML?,php,xml,iterator,simplexml,Php,Xml,Iterator,Simplexml,我尝试过用foreach循环迭代SimpleXML对象。我尝试过使用SimpleXMLIterator,结果也一样 <?xml version="1.0" ?> 格林贝 54311 WI 主街123号。 1982-08-12 厕所 J 雌鹿 123456789 主题部分 完成 1. 1981年在WI发布的SSN 1981 50 1900-01-12 厕所 J 雌鹿 123-45-6789 加利福尼亚州 如果我需要使用,所有名称空间都在SectionResults节点中定义

我尝试过用foreach循环迭代SimpleXML对象。我尝试过使用SimpleXMLIterator,结果也一样

<?xml version="1.0" ?>


格林贝
54311
WI
主街123号。
1982-08-12
厕所
J
雌鹿
123456789
主题部分
完成
1.
1981年在WI发布的SSN
1981
50
1900-01-12
厕所
J
雌鹿
123-45-6789
加利福尼亚州

如果我需要使用,所有名称空间都在SectionResults节点中定义。XML的var_转储返回SectionName、SectionStatus和SectionRecordCount。但是,SectionDetails作为另一个SimpleXML对象返回。我尝试过在$xml->SectionDetails->children('namespace')上循环,但我无法获得任何信息。任何帮助都将不胜感激。

使用
SimpleXML::children()
对于这样的多个名称空间不是最佳选择。
xpath
查询将更好地为您服务。例如:

$path = '/SectionResults/SectionDetails/ns37:UserSuppliedSection/ns7:Address/*';
foreach ($xml->xpath($path) as $e) {
    echo $e->getName() , ': ', trim($e);
    echo "\n";
}

您能在这里打印完整的xml和所有名称空间信息吗?将帮助我们找到解决方案。更新XML以包含名称空间。完整的XML大约要大20倍,但这段摘录显示了在整个过程中重复的模式。最终目标是将其解析为一个清晰的报告,但首先希望将其放入一个更易于使用的关联数组或对象中。
$path = '/SectionResults/SectionDetails/ns37:UserSuppliedSection/ns7:Address/*';
foreach ($xml->xpath($path) as $e) {
    echo $e->getName() , ': ', trim($e);
    echo "\n";
}