Das einzige spezielle Support, den lxml für XML Schema hat, wie hier gesehen wird, ist Ihnen mitzuteilen, ob ein Dokument gemäß einem Schema gültig ist oder nicht. Alles Weitere müssen Sie selbst erledigen.
Dies sollte ein relativ einfacher zweiphasiger Prozess sein, denke ich - Holen Sie alle xsd:element
-Elemente im Schema, die dem von Ihnen gesuchten Typ entsprechen, und betrachten Sie deren Namen:
def getElems(schemaDoc, xmlDoc, typeName):
names = schemaDoc.xpath("//xsd:element[@type = $n]/@name",
namespaces={"xsd":
"http://www.w3.org/2001/XMLSchema"},
n=typeName)
Holen Sie dann alle Elemente mit jedem dieser Namen aus dem Dokument.
elements = []
for name in names:
namedElements = xmlDoc.xpath("//*[local-name() = $name]", name=name)
elements.extend(namedElements)
Jetzt haben Sie eine Liste von Elementen mit den Namen, die dem im Schema übereinstimmenden Typ entsprechen.
return elements
Beachten Sie, dass der xpath-Ausdruck zur Suche im Dokument jedes Element betrachten muss, daher wird es schneller gehen, wenn Sie dies auf den Unterabschnitt des Dokuments einschränken können, der Sie interessiert.