无法使用级联 xpath 查询访问指定节点
Couldn´t access the designated node with cascaded xpath query
我有一个像下面这样的 XML 结构作为简单XML元素:
<?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>
目标是,如果carddav_uid主要和phone号码匹配,那么这个phone号码应该添加某些属性。第一个标准是 carddav_uid,因为 phone 号码可以出现在多个联系人中(例如不同的家庭成员使用相同的座机号码)
找到合适的联系人很容易:
if ($contact = $xmlTargetPhoneBook->xpath(sprintf('//contact[carddav_uid = "%s"]', $uid))) {
我认为用 xpath 在节点中搜索正确的 phone 数字而不是循环遍历结构会更容易:
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
select 从文档的根开始。要从上下文项(contact
元素)中 select,请使用 ./telephony/number
或简单地使用 telephony/number
我有一个像下面这样的 XML 结构作为简单XML元素:
<?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>
目标是,如果carddav_uid主要和phone号码匹配,那么这个phone号码应该添加某些属性。第一个标准是 carddav_uid,因为 phone 号码可以出现在多个联系人中(例如不同的家庭成员使用相同的座机号码)
找到合适的联系人很容易:
if ($contact = $xmlTargetPhoneBook->xpath(sprintf('//contact[carddav_uid = "%s"]', $uid))) {
我认为用 xpath 在节点中搜索正确的 phone 数字而不是循环遍历结构会更容易:
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
select 从文档的根开始。要从上下文项(contact
元素)中 select,请使用 ./telephony/number
或简单地使用 telephony/number