如果您只有元素的名称和能力ID,您将如何在以下XML上打印 Ability -elements 默认 - 属性值?
例如,如果我的名字为'steve'且id为1003,那么我将如何选择并打印该功能默认值为'false'。
<Item Id="1">
<Name>Batman</Name>
<Ability Id="3001" Default="true">Super Strength</Ability>
<Ability Id="3002" Default="false">Master martial artist</Ability>
<Ability Id="3003" Default="false">Access to high tech</Ability>
</Item>
<Item Id="2">
<Name>Superman</Name>
<Ability Id="3004" Default="true">Flight</Ability>
<Ability Id="3005" Default="false">Super Strength</Ability>
<Ability Id="3006" Default="false">Super Speed</Ability>
<Ability Id="3007" Default="true">Stamina</Ability>
<Ability Id="3008" Default="false">Invulnerability</Ability>
</Item>
<Item Id="3">
<Name>Spiderman</Name>
<ScopeNotes/> <HistoryNotes/>
<Ability Id="219" Default="false">Super Reflex & Agility</Ability>
<Ability Id="567" Default="true">Spider Sense</Ability>
</Item>
<Item Id="4">
<Name>Steve</Name>
<Ability Id="1007" Default="false">Cake eating</Ability>
<Ability Id="1001" Default="true">Swearing</Ability>
<Ability Id="1002" Default="false">Watching movies</Ability>
<Ability Id="1003" Default="false">Steve</Ability>
</Item>
问题是每个元素都有不同数量的能力节点,名称“Steve”同时出现在名称和能力节点中。
我已经通过php dom文档阅读并使用它之前循环遍历项目并获取名称(例如,新DOMDocument,加载文件,getElementsByTagName)但我很难理解当你尝试做我喜欢的事情时它是如何工作的已经解释过了。
答案 0 :(得分:1)
正如Bob Fincheimer所建议的那样,XPath应该是一个很好的方法。 以下路径应该为您提供结果
//Item[Name="Steve"]/child::Ability[@Id="1003"]/@Default
路径说明:
//
Item
<Item>
- 节点[Name="Steve"]
<Name>
的节点
child::Ability
<Ability>
[@Id="1003"]
@Default
对于给定的XML,它将返回一个带有1个attribute-node (@Default="false")