python - Is it possible to get the type of an XML node as it was defined in XSD? -
i'm parsing xml in python. i've xsd schema validate xml. can type of particular node of xml defined in xsd?
for example, xml (small part) is
<devicedescription> <wakeupnote> <lang xml:lang="ru">Русский</lang> <lang xml:lang="en">english</lang> </wakeupnote> </devicedescription>
my xsd (once again small part of it):
<xsd:element name="devicedescription" type="zwv:devicedescription" minoccurs="0"/> <xsd:complextype name="devicedescription"> <xsd:sequence> <xsd:element name="wakeupnote" type="zwv:description" minoccurs="0"> <xsd:unique name="langdescrunique"> <xsd:selector xpath="zwv:lang"/> <xsd:field xpath="@xml:lang"/> </xsd:unique> </xsd:element> </xsd:sequence> </xsd:complextype> <xsd:complextype name="description"> <xsd:sequence> <xsd:element name="lang" maxoccurs="unbounded"> <xsd:complextype> <xsd:simplecontent> <xsd:extension base="xsd:string"> <xsd:attribute ref="xml:lang" use="required"/> </xsd:extension> </xsd:simplecontent> </xsd:complextype> </xsd:element> </xsd:sequence> </xsd:complextype>
during parse want know tag wakeupnote defined in xsd complextype zwv:description. how (in python)?
what need for? suppose have lot of these xmls , want check of them have fields english language filled. easy check <lang xml:lang="en"></lang>
empty, allowed not specify tag @ all.
so idea tags may have language descriptions , check <lang>
tag present , has non-empty content en.
upd
since during validation xml checked against xsd, validation engine knows types of nodes. had similar question 7 month ago still no answer. related, imho. validating , filling default values in xml based on xsd in python
if question is: how find name of type given xml node? answer use xpath in python up. xpath run on xsd
//element[@name='wakeupnote']/@type
this should return zwv:description. if returns 2 types, you'll have walk root
/root/foo/wakeupnote (type a) /root/bar/wakeupnote (type b)
this tedious walking down root. you'll have both anonomous , named types.
if question is: how find xml nodes of given type? if schema change frequently, test type of every node parse above method.
if schema known, fixed, , nodes looking findable xpath test each node.
//@xml:lang='en'
then use python check length of each.
in stable-schema case, write second xsd enforces criteria looking for.
Comments
Post a Comment