我目前正在尝试使用lxml库解析python中的XSD文件。 出于测试目的,我将以下文件复制到一起:
<xs:schema targetNamespace="http://www.w3schools.com" elementFormDefault="qualified">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name="BaselineShiftValueType">
<xs:annotation>
<xs:documentation>The actual definition is
baseline | sub | super | <percentage> | <length> | inherit
not sure that union can do this
</xs:documentation>
</xs:annotation>
<xs:restriction base="string"/>
</xs:simpleType>
</xs:schema>
现在我尝试获取根(schema)的子级,即:xs:element和xs:simpleType。 通过迭代根的子级,一切正常:
^{pr2}$这将导致输出:
{http://www.w3.org/2001/XMLSchema}element: {'name': 'note'}
{http://www.w3.org/2001/XMLSchema}simpleType: {'name': 'BaselineShiftValueType'}
但当我只想生某一类型的孩子时,这是行不通的:
root = self.XMLTree.getroot()
element = self.XMLTree.find("element")
print(str(element))
这样可以得到以下输出:
None
同样使用findall或写入./element
或.//element
不会改变结果。
我很确定我遗漏了什么。正确的方法是什么?在
要遵循@helderdarocha's answer,还可以在字典中定义命名空间,并在搜索函数中使用它,如在python xml.etree.ElementTree doc中:
您缺少名称空间。未固定的XPath选择器被认为不属于任何命名空间。您必须向
register_namespace
注册它:然后使用前缀为的选择器查找元素:
^{pr2}$相关问题 更多 >
编程相关推荐