Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 无法使用级联xpath查询访问指定节点_Php_Xpath_Simplexml - Fatal编程技术网

Php 无法使用级联xpath查询访问指定节点

Php 无法使用级联xpath查询访问指定节点,php,xpath,simplexml,Php,Xpath,Simplexml,我有一个类似以下的XML结构作为SimpleXMLElement: <?xml version="1.0" encoding="UTF-8"?> <phonebooks> <phonebook name="phonebook"> ... <contact> <carddav_uid>70ad8a26-21ab-4b42-b641-44a7667e802a</cardd

我有一个类似以下的XML结构作为SimpleXMLElement:

<?xml version="1.0" encoding="UTF-8"?>
<phonebooks>
    <phonebook name="phonebook">
        ...
        <contact>
            <carddav_uid>70ad8a26-21ab-4b42-b641-44a7667e802a</carddav_uid>
            <telephony>
                <number id="0" type="work">05171290</number>
                <number id="1" type="work">05171291919</number>
                <number id="2" type="work">05171292000</number>
                <number id="3" type="work">05171292010</number>
                <number id="4" type="work">05171292245</number>
                <number id="5" type="work">05171292313</number>
                <number id="6" type="work">05171292383</number>
                <number id="7" type="work">05171292617</number>
                <number id="8" type="work">05171292761</number>
            </telephony>
            <person>
                <realName>ACME Company</realName>
            </person>
        </contact>
        ...
    </phonebook>
</phonebooks>
我认为使用xpath在节点中搜索正确的电话号码会更容易,而不是在结构中循环:

if ($contact = $xmlTargetPhoneBook->xpath(sprintf('//contact[carddav_uid = "%s"]', $uid))) {
    if ($phone = $contact[0]->xpath(sprintf('/telephony/number[text() = "%s"]', $number))) {
        // check for debugging 
        print_r($phone);
        /*
        $phone->addAttribute($attribute = $value);
        */
    }
}
但我什么也没有得到:

Array
(
)

我想错了吗?

/telephony/number从文档的根目录中选择。要从上下文项中选择联系人元素,请使用./telephony/number或简单地使用telephony/number

谢谢-我自己也发现了这一点:如果答案是正确的,那么其他读者可以将其标记为已接受,即使您已经解决了问题。您是否愿意以相反的方式帮助我?我选择包含某些属性的所有节点:$numbers=$xmlPhonebook->xpath'//numbers[@attrib_1或@attribute_2];此外,我还必须确定每种情况下的节点carddav_uid或其内容。但是$parentNode=$numbers[0]->xpath祖先::*[contact]/*;向我提供所有联系人,但不提供具体的祖先。如果您有新问题,最好以新问题的形式提出,而不是对以前问题的答案发表评论,
Array
(
)