基于属性获取节点的PHP简单XML


PHP Simple XML to get Nodes based on their attribute

我创建了一个XML文件,其中包含特许经营权的结构化列表。问题是,我想通过它的id获取特许经营权,而不必遍历整个列表。

这就是我如何获得第一个特许经营的属性。但我想取回一个id为3的特许经营对象。我认为id应该是关键字,但它不是,见下面:

SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [id] => 1
            [name] => Franchise 1
            [aid] => 
        )
)

这是我如何访问第一个特许经营权属性,但这对我来说不是很有帮助。

$this->xmlData->franchises->franchise->attributes()
下面是xml 的结构
<?xml version="1.0" encoding="UTF-8"?>
<data>
    <franchises>
        <franchise id="1" name="Franchise 1" >
            <header>
                <accountId>2354435435</accountId>
            </header>
            <used-list>
                <accountId>2354435435</accountId>
            </used-list>
            <used-detail>
                <accountId>2354435435</accountId>
            </used-detail>
            <contact-us>
                <accountId>2354435435</accountId>
            </contact-us>
            <new-detail>
                <accountId>2354435435</accountId>
            </new-detail>
            <left-column>
                <accountId>2354435435</accountId>
            </left-column>
            <new-list>
                <accountId>2354435435</accountId>
            </new-list>
            <offer-detail>
                <accountId>2354435435</accountId>
            </offer-detail>
            <popup>
                <accountId>2354435435</accountId>
            </popup>
        </franchise>
        <franchise id="2" name="Franchise 2" >
            <header>
                <accountId>2354435435</accountId>
            </header>
            <used-list>
                <accountId>2354435435</accountId>
            </used-list>
            <used-detail>
                <accountId>2354435435</accountId>
            </used-detail>
            <contact-us>
                <accountId>2354435435</accountId>
            </contact-us>
            <new-detail>
                <accountId>2354435435</accountId>
            </new-detail>
            <left-column>
                <accountId>2354435435</accountId>
            </left-column>
            <new-list>
                <accountId>2354435435</accountId>
            </new-list>
            <offer-detail>
                <accountId>2354435435</accountId>
            </offer-detail>
            <popup>
                <accountId>2354435435</accountId>
            </popup>
        </franchise>
    </franchises>
</data>

看看xpath。可以按属性检索特定节点,如下所示:

$result = $xml->xpath("//franchises/franchise[@id='2']");