Python lxml не поддерживает синтаксис xpath «начинается с»? - PullRequest
0 голосов
/ 16 мая 2019
str = """<ROOT>
<ITEM>
   <REVENUE_YEAR>2554-02</REVENUE_YEAR>
   <REGION>Central</REGION>
</ITEM>
<ITEM>
  <REVENUE_YEAR>2552-02</REVENUE_YEAR>
  <REGION>Central</REGION>
</ITEM>
<ITEM>
  <REVENUE_YEAR>2552-03</REVENUE_YEAR>
  <REGION>Central</REGION>
</ITEM>
</ROOT>"""

xml = etree.fromstring(str)
xpath_str = ".//ITEM[starts-with(REVENUE_YEAR,'2554')]"
result = xml.find(xpath_str)
print(result)

Привет, код выше поднял SyntaxError: неверный предикат, значит ли это, что lxml не поддерживает начальный запуск?Любой другой способ найти элемент REVENUE_YEAR (2554-02) по xpath с lxml?Спасибо!

1 Ответ

2 голосов
/ 16 мая 2019

Он поддерживает xpath, но вам нужно использовать xpath:

str = """<ROOT>
<ITEM>
   <REVENUE_YEAR>2554-02</REVENUE_YEAR>
   <REGION>Central</REGION>
</ITEM>
<ITEM>
  <REVENUE_YEAR>2552-02</REVENUE_YEAR>
  <REGION>Central</REGION>
</ITEM>
<ITEM>
  <REVENUE_YEAR>2552-03</REVENUE_YEAR>
  <REGION>Central</REGION>
</ITEM>
</ROOT>"""

xml = etree.fromstring(str)
xpath_str = ".//ITEM[starts-with(REVENUE_YEAR,'2554')]"
result = xml.xpath(xpath_str)
print(result) # which is a list containing only one element
...