[英]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.