【发布时间】:2013-01-10 17:02:23
【问题描述】:
我需要根据其子 MajorDescription 的值对以下 XML(foreach ProgramList)进行排序
<ArrayOfProgramList xmlns="http://schemas.datacontract.org/2004/07/Taca.Resources" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<ProgramList>
<AreaOfInterests xmlns:a="http://schemas.datacontract.org/2004/07/Taca">
<a:AreaOfInterest>
<a:Interest>ABORIGINAL STUDIES</a:Interest>
</a:AreaOfInterest>
</AreaOfInterests>
<Coop>true</Coop>
<MajorDescription>ABORIGINAL COMMUNITY AND SOCIAL DEVELOPMENT</MajorDescription>
<Program>ACSD</Program>
<ProgramLocations>
<ProgramLocation>
<Campus>Barrie</Campus>
</ProgramLocation>
</ProgramLocations>
<Term>201210</Term>
</ProgramList>
<ProgramList>
<AreaOfInterests xmlns:a="http://schemas.datacontract.org/2004/07/Taca">
<a:AreaOfInterest>
<a:Interest>GRADUATE CERTIFICATE STUDIES</a:Interest>
</a:AreaOfInterest>
<a:AreaOfInterest>
<a:Interest>HEALTH AND WELLNESS STUDIES</a:Interest>
</a:AreaOfInterest>
</AreaOfInterests>
<Coop>false</Coop>
<MajorDescription>ADVANCED CARE PARAMEDIC</MajorDescription>
<Program>PARM</Program>
<ProgramLocations>
<ProgramLocation>
<Campus>Barrie</Campus>
</ProgramLocation>
</ProgramLocations>
<Term>201210</Term>
</ProgramList>
</ArrayOfProgramList>
我正在尝试使用 SimpleDOM 来完成它,因为我已经阅读了在其他 SO 问题上对 XML 进行排序的最简单方法。
我尝试过使用:
foreach($listxml->sortedXPath('//ArrayOfProgramList/ProgramList','//ArrayOfProgramList/ProgramList/MajorDescription') as $program){ ... }
以及各种其他类似的“排序”值,例如“@MajorDescription”、“/MajorDescription”和“.”正如这里所建议的How does one use SimpleDOM sortedXPath to sort on node value?,但是当我用 var_dump() 检查它时,一切都返回一个空数组
我认为问题是我需要对子节点的值进行排序 - 这可能吗? foreach 需要在 ProgramList 上,因为我需要在每次迭代时输出 ProgramList 中所有子节点的值。
有什么建议吗?我不必使用 SimpleDOM,我对任何有效的方法持开放态度 - 目前我正在迭代 A-Z 数组,并且对于每个字母,迭代 ProgramList,将 MajorDescription 的第一个字母与当前字母进行比较和如果匹配则输出 - 这显然 不是 理想的,只对第一个字母进行排序......
【问题讨论】:
标签: php xml xpath simplexml simpledom