Python lxml 不支持 xpath 语法 'starts-with'?

Python lxml does not support xpath syntax 'starts-with'?

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: invalid predicate,是不是说lxml不支持starts-with?使用 lxml 通过 xpath 定位 REVENUE_YEAR 元素(2554-02)的任何其他方法?谢谢!

它支持 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