0

如果您只有元素的名称和能力 ID,您将如何在以下 XML 上打印Ability -elements Default -attribute 值?

例如,如果我有名称“史蒂夫”和 ID 1003,那么我将如何选择并打印该能力默认值“假”。

<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>

问题是每个元素都有不同数量的能力节点,并且名字“史蒂夫”出现在名字和能力节点中。

我已经阅读了 php dom 文档,并且之前使用过它来遍历项目并获取名称(例如新的 DOMDocument、加载文件、getElementsByTagName),但是当您尝试执行我上面解释的操作时,我很难理解它是如何工作的。

4

1 回答 1

1

正如 Bob Finchemer 所建议的,XPath 应该是一个很好的方法。以下路径应该会给你结果

//Item[Name="Steve"]/child::Ability[@Id="1003"]/@Default

路径说明:

  1. //
    选择文档中各处的节点(我不知道完整的 xml)
  2. Item
    选择<Item>-节点
  3. [Name="Steve"]
    <Name>选择具有nodeValue "Steve" 的子元素的节点
  4. child::Ability
    选择子节点<Ability>
  5. [@Id="1003"]
    选择 ID 属性设置为 1003 的节点
  6. @Default
    选择默认属性

对于给定的 XML,它将返回一个带有 1 个属性节点的 DOMNodeList(@Default="false")

如何使用它?http://www.php.net/manual/de/domxpath.query.php

演示:http ://codepad.org/qtgWXFtm

于 2012-09-12T23:10:42.287 回答