【发布时间】:2015-06-14 21:06:30
【问题描述】:
我不得不重写部分程序以使用 XMLReader 选择 XML 文件的部分进行处理。
以这个简化的 XML 为例:
<odds>
<sport>
<region>
<group>
<event name="English Championship 2014-15" eventid="781016.1">
<bet name="Kazanan" betid="12377108.1">
<selection selectionid="52411062.1"/>
</selection>
</bet>
</event>
</group>
</region>
</sport>
</odds>
这个电话给xpath():
$bets = $xml->xpath(
"//odds/sport/region/group/event/bet/selection[contains(@selectionid,'".$selectionToFind."')]/.."
);
将选择整个 <bet> 节点及其子节点(<selection> 节点)。
然而,我的代码只会选择一个具有给定selectionid 的<selection> 节点:
$reader = new XMLReader;
$reader->open('file.xml');
while($reader->read()) {
$event = $reader->getAttribute($value);
if ($event == 781016.1 ) {
$node = new SimpleXMLElement($reader->readOuterXML());
var_dump($node);
break;
}
}
如何复制xpath() 和XMLReader 的行为,以便我选择<bet> 节点及其子节点,而不仅仅是一个<selection> 子节点?
我想问题归结为:我可以通过孩子的属性值选择整个父节点<bet>,例如<selection selectionid="[some_value]">?
【问题讨论】:
-
2 件事。实际上,您的 XML 中只有一个选择节点。其次,您的代码应该选择当前的“事件”注释,而不是“投注”节点。 'event' 注释具有 'eventid' 属性。
-
@YasenZhelev,抱歉我已经进行了编辑。事实上,我的代码中有一个变量
$value。它也被封装在一个类方法中。我只是复制了简化的表示形式——与 XML 相同——它要大得多。我想问题归结为:我可以通过孩子的属性值选择整个父节点<bet>,例如<selection selectionid="[some_value]">? -
好的,检查我更新的答案。我认为它会帮助您解决问题。
标签: php xml xpath xml-parsing