如果只有元素的名称和能力id,如何在以下XML上打印能力-元素默认-属性值?
例如,如果我的名字是"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),但当您尝试执行上面解释的操作时,我很难理解它是如何工作的。
正如Bob Fincheimer所建议的那样,XPath应该是一种不错的方法。下面的路径应该会给你的结果
//Item[Name="Steve"]/child::Ability[@Id="1003"]/@Default
路径说明:
//
在文档中各处选择节点(我不知道完整的xml)Item
选择<Item>
-节点[Name="Steve"]
选择具有nodeValue为"Steve"的子元素<Name>
的节点child::Ability
选择子节点<Ability>
[@Id="1003"]
选择Id属性设置为1003的节点@Default
选择"默认"属性
对于给定的XML,它将返回一个具有1个属性节点(@Default="false")
的DOMNodeList
如何使用它?http://www.php.net/manual/de/domxpath.query.php
演示:http://codepad.org/qtgWXFtm