使用基于子元素的XPath检索元素

时间:2013-10-28 21:21:17

标签: php xml xpath

我有一个XML文档,格式如下:

<CONFIGURATION>
<ADMIN REFERRER="BCTRD" REQUIRE_AGREEMENTS="true" ALLOW_UPGRADES="true" />
<LAYOUT HIDE_PRESELECTED_SERVICES="true" AGREEMENTS_PER_EXCHANGE="true"></LAYOUT>
<SERVICE ID="TRE" CODE="TRADER_EMINI" OPTIONAL_BROKER="true">
    <EXCHANGE GROUP="FOO"/>
</SERVICE>
<SERVICE ID="TR" CODE="TRADER">
    <DEFAULT/>
    <EXCHANGE GROUP="BAR"/>
</SERVICE>
</CONFIGURATION>

我目前正在使用此代码块来检索默认服务的服务代码:

$serviceList = $this->xpaths->query('config',"//SERVICE");
foreach ($serviceList as $service) {
    if ($service->getElementsByTagName('DEFAULT')->length) {
        $serviceCode = $service->attributes->getNamedItem('CODE')->nodeValue;
        break;
    }
}

我怀疑用一两行XPath可以做到这一点,但我还没有弄清楚如何做到这一点。如何格式化XPath查询以检索我之后的服务代码?

2 个答案:

答案 0 :(得分:1)

另一个xpath:

//SERVICE/DEFAULT/../@CODE

看到它有效:http://codepad.viper-7.com/CCzCn0

答案 1 :(得分:1)

您可以使用以下XPath语句

直接获取“CODE”属性的值
//SERVICE[DEFAULT]/@CODE

这基本上是'给我来自任何具有DEFAULT子元素的SERVICE元素的CODE属性。

希望这有帮助。