使用lxm查找基于xsd类型的元素

2024-10-01 00:33:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用lxml2.x获得一个具有特定xsd类型的元素列表,但是我不知道如何遍历特定类型的xsd。在

模式示例:

<xsd:element name="ServerOwner" type="srvrs:string90" minOccurs="0">
<xsd:element name="HostName" type="srvrs:string35" minOccurs="0">

xml数据示例:

^{pr2}$

理想功能如下:

    elements = getElems(xml_doc, 'string90')

    def getElems(xml_doc, xsd_type):
      ** xpath or something to find the elements and build a dict
      return elements

Tags: name示例类型doctypexmlelementselement
1条回答
网友
1楼 · 发布于 2024-10-01 00:33:31

实际上,lxml对xmlschema的唯一特殊支持,如here所示,就是告诉您根据某种模式,某些文档是否有效。任何更复杂的事你都得自己动手。在

这应该是一个相对简单的两阶段过程,我认为获取模式中与您关心的类型匹配的所有xsd:element元素,并查看它们的名称:

def getElems(schemaDoc, xmlDoc, typeName):
    names = schemaDoc.xpath("//xsd:element[@type = $n]/@name",
                            namespaces={"xsd": 
                                        "http://www.w3.org/2001/XMLSchema"},
                            n=typeName)

然后,从文档中获取每个名称的所有元素。在

^{pr2}$

现在您有了一个元素列表,这些元素的名称与模式中的类型匹配。在

    return elements

请注意,用于搜索文档的xpath表达式必须查看每个元素,因此,如果您可以将其压缩到只查看文档的子部分,那么它的速度会更快。在

相关问题 更多 >