[英]Selecting an XPath child node without the parent namespace
我不經常使用XML,也從未使用過XPath。 我正在嘗試使用XPath使用python / lxml解析xml文檔。 lxml依賴libxml2,因此我無法訪問XPath 2.0功能。 我正在嘗試使用客戶端提供的XPath列表來執行此操作,其中不包括名稱空間。
如果有幫助,這些用於加拿大房地產協會的RETS服務器響應。 他們的文檔在這里: http : //www.crea.ca/wp-content/uploads/2016/02/DDFDataFeedTechnicalDoc-2016-3.pdf
路徑的格式如下:(還有更多):
Building/SizeInterior
Land/SizeTotal
父元素具有名稱空間“ urn:CREA.Search.Property
”,如以下示例響應所示:
<?xml version="1.0" encoding="UTF-8"?>
<RETS ReplyCode="0" ReplyText="Operation successful">
<COUNT Records="1" />
<RETS-RESPONSE xmlns="urn:CREA.Search.Property">
<Pagination>
<TotalRecords>1</TotalRecords>
<Limit>100</Limit>
<Offset>1</Offset>
<TotalPages>1</TotalPages>
<RecordsReturned>1</RecordsReturned>
</Pagination>
<PropertyDetails ID="XXXXXXXXXX" LastUpdated="Sun, 12 Jun 2016 14:21:20 GMT">
<Building>
<SizeInterior />
<Type>No Building</Type>
<UtilityWater>Private Utility</UtilityWater>
</Building>
<Land>
<SizeTotal>0.28 ac|under 1 acre</SizeTotal>
<SizeTotalText>0.28 ac|under 1 acre</SizeTotalText>
<AccessType>Easy access</AccessType>
<Acreage>false</Acreage>
<SizeIrregular>0.28</SizeIrregular>
</Land>
</PropertyDetails>
</RETS-RESPONSE>
</RETS>
我需要能夠抓住那些元素,而不必盡可能修改XPath。
到目前為止,我發現的內容似乎表明,即使僅在父元素上顯式指定了名稱空間,我也需要指定是否對路徑中的每個子對象,僅在處理它們時才使客戶端提供的路徑可用在每個元素之前添加名稱空間。
那是正確的還是有一種更清潔的方法? 這讓我感到混亂:如果子項沒有顯式分配給它們的名稱空間,為什么XPath 必須對其進行顯式顯示?
我想我缺少了什么。
關於技術限制,您還沒有說太多。 如果您能夠使用XPath 2.0處理器,則應該能夠將“元素和類型的默認命名空間”定義為urn:CREA.Search.Property
,並使用諸如Building/SizeInterior
前綴名稱的路徑處理元素名稱就像在這個命名空間中一樣。
(XPath不會將n:aaa/bbb
視為n:aaa/n:bbb
是,將無命名空間元素bbb
作為命名空間元素n:aaa
的子元素是相當合法的)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.