Python中etree.XPath使用|运算符出现语法错误的排查与修复
错误原因
你的XPath表达式语法错误是因为Python的lxml.etree使用XPath 1.0标准,而你写的//bridge-domain/(a|b)这种括号内的联合选择语法是XPath 2.0及以上才支持的特性。XPath 1.0不允许在路径中间通过括号分组后用|合并子节点路径,必须将每个目标节点的完整路径明确写出。
修正方法
把每个需要选择的子节点路径都基于父节点//bridge-domain完整展开,再用|运算符连接所有完整路径。
修正后的示例
核心错误表达式的修正
原错误核心表达式:
XPATH = '//bridge-domain/(bridge-domain-group-name|bridge-domain-name)'
修正后:
XPATH = '//bridge-domain/bridge-domain-group-name | //bridge-domain/bridge-domain-name'
完整表达式的修正
原完整表达式修正后:
XPATH = '//bridge-domain/bridge-domain-group-name | //bridge-domain/bridge-domain-name | //bridge-domain/bridge-acs/bridge-ac/interface-name | //bridge-domain/bridge-acs/bridge-ac/attachment-circuit/state | //bridge-domain/bridge-access-pws/bridge-access-pw/neighbor | //bridge-domain/bridge-access-pws/bridge-access-pw/pseudowire/state'
验证代码
import lxml.etree as etree XPATH = '//bridge-domain/bridge-domain-group-name | //bridge-domain/bridge-domain-name | //bridge-domain/bridge-acs/bridge-ac/interface-name | //bridge-domain/bridge-acs/bridge-ac/attachment-circuit/state | //bridge-domain/bridge-access-pws/bridge-access-pw/neighbor | //bridge-domain/bridge-access-pws/bridge-access-pw/pseudowire/state' try: xpath_obj = etree.XPath(XPATH) print("XPath expression compiled successfully.") except etree.XPathSyntaxError as e: print(f"XPath syntax error: {e}")
内容的提问来源于stack exchange,提问作者Jan Krupa
相关产品推荐
相关产品推荐

