使用 "OR" 运算符的 XMLPath 查询
XMLPath Query with "OR" Operator
我得到一个 .xml
文件,其中包含以下条目:
<country>
<province id="prov-cid-cia-Greece-3" country="GR">
<name>Attiki</name>
<area>3808</area>
<population>3522769</population>
<city id="cty-Greece-Athens" is_country_cap="yes" country="GR" province="prov-cid-cia-Greece-3">
<name>Athens</name>
<longitude>23.7167</longitude>
<latitude>37.9667</latitude>
<population year="81">885737</population>
<located_at watertype="sea" sea="sea-Mittelmeer"/>
</city>
</province>
</country>
然而,也有一些节点被称为 city
而没有 province
作为 parent:
<country>
<city id="stadt-Shkoder-AL-AL" country="AL">
<name>Shkoder</name>
<longitude>19.2</longitude>
<latitude>42.2</latitude>
<population year="87">62000</population>
<located_at watertype="lake" lake="lake-Skutarisee"/>
</city>
</country>
无需进一步解释,我想 select 所有节点 city
,但是,在我当前的查询中它 select 仅 cities
没有 province
作为 parent
query = f"//country/city[@is_country_cap = \"yes\" and ./located_at[@watertype]]/name/text()"
如何在我的查询中包含 /province/country
?我试过:
query = f"//country/(city | ./province/city)[@is_country_cap = \"yes\" and ./located_at[@watertype]]/name/text()"
没有任何成功,我得到一个错误。
您可以匹配具有 <country>
或 <province>
父级的所有 <city>
元素。然后,在第二个谓词中,像这样添加您的其他要求:
//city[parent::country or parent::province][@is_country_cap = 'yes' and located_at[@watertype]]/name
或者,接近你的语言
query = f"//city[parent::country or parent::province][@is_country_cap = \"yes\" and located_at[@watertype]]/name/text()"
也许这对你有帮助。
您的错误是使用 |
运算符而不是关键字 or
。在 XPath 中,|
运算符表示“合并节点集”,而不是像 C 中那样的逻辑“或”。
我得到一个 .xml
文件,其中包含以下条目:
<country>
<province id="prov-cid-cia-Greece-3" country="GR">
<name>Attiki</name>
<area>3808</area>
<population>3522769</population>
<city id="cty-Greece-Athens" is_country_cap="yes" country="GR" province="prov-cid-cia-Greece-3">
<name>Athens</name>
<longitude>23.7167</longitude>
<latitude>37.9667</latitude>
<population year="81">885737</population>
<located_at watertype="sea" sea="sea-Mittelmeer"/>
</city>
</province>
</country>
然而,也有一些节点被称为 city
而没有 province
作为 parent:
<country>
<city id="stadt-Shkoder-AL-AL" country="AL">
<name>Shkoder</name>
<longitude>19.2</longitude>
<latitude>42.2</latitude>
<population year="87">62000</population>
<located_at watertype="lake" lake="lake-Skutarisee"/>
</city>
</country>
无需进一步解释,我想 select 所有节点 city
,但是,在我当前的查询中它 select 仅 cities
没有 province
作为 parent
query = f"//country/city[@is_country_cap = \"yes\" and ./located_at[@watertype]]/name/text()"
如何在我的查询中包含 /province/country
?我试过:
query = f"//country/(city | ./province/city)[@is_country_cap = \"yes\" and ./located_at[@watertype]]/name/text()"
没有任何成功,我得到一个错误。
您可以匹配具有 <country>
或 <province>
父级的所有 <city>
元素。然后,在第二个谓词中,像这样添加您的其他要求:
//city[parent::country or parent::province][@is_country_cap = 'yes' and located_at[@watertype]]/name
或者,接近你的语言
query = f"//city[parent::country or parent::province][@is_country_cap = \"yes\" and located_at[@watertype]]/name/text()"
也许这对你有帮助。
您的错误是使用 |
运算符而不是关键字 or
。在 XPath 中,|
运算符表示“合并节点集”,而不是像 C 中那样的逻辑“或”。