[英]Unexpected Result from PHP DOMXPath query
我有一个xml文档的结构:
<realestates:realEstates xmlns:ns2="http://rest.immobilienscout24.de/schema/platform/gis/1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:common="http://rest.immobilienscout24.de/schema/common/1.0" xmlns:realestates="http://rest.immobilienscout24.de/schema/offer/realestates/1.0">
<realEstateList>
<typeList>
<realEstateElement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:offerlistelement="http://rest.immobilienscout24.de/schema/offer/listelement/1.0">
<address>
<postcode>31874</postcode>
</address>
</realEstateElement>
</typeList>
</realEstateList>
</realestates:realEstates>
现在,我想选择所有不以realEstateElement-elemets开头的元素,即在邮政编码中以31开始,因为我想从文档中删除它们。
我尝试选择与此xpath-expression匹配的所有匹配项
typeList//realEstateElement/address[starts-with(postcode,"31")]
但是我什么也没得到。 如果在开始时删除typeList,则会得到所有匹配的邮政编码元素,而不是realEstateElement元素。 有谁知道我如何以一种简单的方式删除所有不匹配的元素?
谢谢!
此XPath表达式:
//realEstateElement/address[starts-with(postcode,"31")]
选择每个后代realEstateElement
节点内的所有 address
节点。 这是一个包含两个步骤的XPath表达式。 最后一步始终是您选择的那一步。 前面的步骤仅为其他步骤创建上下文 。 每个步骤可以具有一个或多个谓词 ,这些谓词的格式为[
* boolean expression * ]
。 将每个选定的节点与其谓词进行比较,只有与之匹配的谓词才会保留在上下文或最终结果中。
因此,如果要选择与谓词匹配的realEstateElement
节点,则需要将其作为最后一步。 路径的其余部分( address/postcode
)可在realEstateElement
节点上下文中的谓词中使用:
//realEstateElement[starts-with(address/postcode,"31")]
这将返回所有包含address
元素的realEstateElement
节点,该address
元素包含一个postcode
元素,其文本内容以31
开头。
注1 :如果必须进一步限制节点,则可以添加更多谓词:
//realEstateElement[starts-with(address/postcode,"31")][not(starts-with(address/postcode, "318"))]
这将从选择realEstateElements
有address/postcode
开始与“31”,所有那些不与318开始的谓词, 都是由以前的断言或步骤中创建的上下文中无效。
注意2 :如果您需要在XPath中包含名称空间中的任何一个,那么名称空间将非常重要,到目前为止,情况似乎并非如此。 如果需要这样做,则必须注册一个前缀,以便可以在表达式中使用选择器:
$xmldoc->registerXPathNamespace('re', 'http://rest.immobilienscout24.de/schema/offer/realestates/1.0');
前缀不必与文档中声明的前缀匹配(如果它是默认名称空间,则该前缀可能不存在)。 这样,您可以使用像这样的表达式:
/re:realEstates/realEstateList/typeList/realEstateElement[starts-with(address/postcode,"31")]
它也使用绝对表达式选择realEstateElement
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.