如何用XPath或lxml获取带命名空间的XSD元素vc:minVersion数据?
解决XSD文件中vc:minVersion属性获取问题
你的代码无法获取到vc:minVersion值的原因有两个:
- 你用XPath查找的是名为
minVersion的元素,但目标实际上是根元素的属性 - 没有正确针对带命名空间的属性编写XPath表达式
方法一:直接通过根节点获取属性(最简方案)
利用元素的get()方法,传入带命名空间的完整属性名(格式为{命名空间URI}属性名):
import lxml.etree as ET dom = ET.parse('/lbs.xsd') rootxml = dom.getroot() # 使用命名空间URI+属性名的格式获取 min_version = rootxml.get('{http://www.w3.org/2007/XMLSchema-versioning}minVersion') print(min_version) # 输出:1.1
方法二:使用正确的XPath表达式
如果需要用XPath查找(比如场景中有多个该属性),要在XPath中用@标识属性,并带上vc前缀:
import lxml.etree as ET dom = ET.parse('/lbs.xsd') rootxml = dom.getroot() nss = rootxml.nsmap # 查找所有vc:minVersion属性,@表示属性,vc:对应命名空间前缀 for attr_value in rootxml.xpath('//@vc:minVersion', namespaces=nss): print(attr_value) # 输出:1.1
关键说明
- XML中带命名空间的属性必须通过命名空间前缀或完整URI来引用,不能直接写
minVersion - XPath里
@符号用于标识属性节点,//@vc:minVersion表示查找文档中所有vc命名空间下的minVersion属性
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

