Comment puis-je analyser le XSD ci-dessous pour obtenir les 3 noms à l'intérieur <xsd:complexType name="Register-Type" abstract="true">
Je voudrais obtenir les noms «mesures», «description» et «notes» et mettre chacun dans une colonne sur le csv (aucune autre information, juste ces 3 noms à afficher comme en-têtes pour l'instant).
J'essaie d'utiliser lxml mais je ne sais pas comment entrer dans la balise complexType spécifique que je veux.
Ci-dessous le fichier XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="urn:nortel:namespaces:mcp:oms" xmlns:mcp="urn:nortel:namespaces:mcp:oms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:parm="http://www.nortelnetworks.com/namespaces/mcp/params" xmlns:xmllib="http://www.w3.org/2001/03/XMLSchema/TypeLibrary" elementFormDefault="qualified" attributeFormDefault="unqualified">
        <xsd:import namespace="http://www.nortelnetworks.com/namespaces/mcp/params" schemaLocation="../parms/basedefs.xsd"/>
        <xsd:import namespace="http://www.w3.org/2001/03/XMLSchema/TypeLibrary" schemaLocation="../w3org/TypeLibrary.xsd"/>
        
        <xsd:simpleType name="Precollector-Type">
                <xsd:annotation>
                        <xsd:documentation xml:lang="en">
                                This enumerates the types of pre-collector interfaces a helper class
                                will implement.
                        </xsd:documentation>
                </xsd:annotation>
                <xsd:restriction base="xsd:string">
                        <xsd:enumeration value="centurySecond"/>
                        <xsd:enumeration value="liveQuery"/>
                        <xsd:enumeration value="transferPeriod"/>
                </xsd:restriction>
        </xsd:simpleType>
        
        <xsd:simpleType name="Register-Name-Type">
                <xsd:annotation>
                        <xsd:documentation xml:lang="en">
                                This type defines the pattern for a allowed OM register name.
                        </xsd:documentation>
                </xsd:annotation>
                <xsd:restriction base="xsd:string">
                        <xsd:minLength value="1"/>
                        <xsd:pattern value="[a-zA-Z_][a-zA-Z0-9_]*"/>
                </xsd:restriction>
        </xsd:simpleType>
        
        <xsd:simpleType name="Class-Name-Type">
                <xsd:annotation>
                        <xsd:documentation xml:lang="en">
                                This type defines the pattern for a allowed class name.
                        </xsd:documentation>
                </xsd:annotation>
                <xsd:restriction base="xsd:string">
                        <xsd:minLength value="1"/>
                        <xsd:pattern value="[a-zA-Z][a-zA-Z0-9_]*"/>
                </xsd:restriction>
        </xsd:simpleType>
        <xsd:simpleType name="Package-Name-Type">
                <xsd:annotation>
                        <xsd:documentation xml:lang="en">
                                This type defines the pattern for a allowed package name.
                        </xsd:documentation>
                </xsd:annotation>
                <xsd:restriction base="xsd:string">
                        <xsd:minLength value="1"/>
                        <xsd:pattern value="([a-zA-Z][a-zA-Z0-9_]*)([.][a-zA-Z][a-zA-Z0-9_]*)*"/>
                </xsd:restriction>
        </xsd:simpleType>
        
        <xsd:simpleType name="Group-Name-Type">
                <xsd:annotation>
                        <xsd:documentation xml:lang="en">
                                This type defines the pattern for a allowed OM group name.
                        </xsd:documentation>
                </xsd:annotation>
                <xsd:restriction base="xsd:string">
                        <xsd:minLength value="1"/>
                        <xsd:maxLength value="32"/>
                        <xsd:pattern value="[a-zA-Z][a-zA-Z0-9_]*"/>
                </xsd:restriction>
        </xsd:simpleType>
        <xsd:complexType name="NE-List-Type">
            <xsd:sequence>
                <xsd:element name="ne" minOccurs="1" maxOccurs="unbounded">
                    <xsd:simpleType>
                        <xsd:restriction base="parm:NE-Base-Type"/>
                    </xsd:simpleType>
                </xsd:element>
            </xsd:sequence>
        </xsd:complexType>
        <xsd:element name="list" type="mcp:NE-List-Type">
                <xsd:unique name="UniqueNEinList">
                    <xsd:selector xpath="mcp:ne"/>
                    <xsd:field xpath="."/>
                </xsd:unique>
        </xsd:element>
        <xsd:complexType name="OM-NE-List-Type">
                <xsd:annotation>
                        <xsd:documentation xml:lang="en">
                                This type defines the way that you define which NE types
                                will generate a given OM group.  It uses the NE base type
                                that we use for our engineering and configuration parameters.
                        </xsd:documentation>
                </xsd:annotation>
                <xsd:choice>
                        <xsd:element name="all">
                                <xsd:complexType/>
                        </xsd:element>
                        <xsd:element ref="mcp:list"/>
                </xsd:choice>
        </xsd:complexType>
        
        <xsd:complexType name="OM-Installation-Type">
            <xsd:sequence>
                <xsd:element name="package" type="mcp:Package-Name-Type"/>
                <xsd:element ref="mcp:list"/>
            </xsd:sequence>
        </xsd:complexType>
        <xsd:complexType name="Register-Type" abstract="true">
                <xsd:sequence>
                        <xsd:element name="measures" type="xmllib:text"/>
                        <xsd:element name="description" type="xmllib:text"/>
                        <xsd:element name="notes" type="xmllib:text" minOccurs="0"/>
                </xsd:sequence>
                <xsd:attribute name="name" type="mcp:Register-Name-Type" use="required"/>
        </xsd:complexType>
        
        <xsd:complexType name="Counter-Type">
                <xsd:complexContent>
                        <xsd:extension base="mcp:Register-Type"/>
                </xsd:complexContent>
        </xsd:complexType>
        
        <xsd:complexType name="Usage-Type">
                <xsd:complexContent>
                        <xsd:extension base="mcp:Register-Type">
                                <xsd:attribute name="hasThresholds" type="xsd:boolean" default="false"/>
                        </xsd:extension>
                </xsd:complexContent>
        </xsd:complexType>
        
        <xsd:complexType name="LowWaterGauge-Type">
                <xsd:complexContent>
                        <xsd:extension base="mcp:Register-Type"/>
                </xsd:complexContent>
        </xsd:complexType>
        
        <xsd:complexType name="HighWaterGauge-Type">
                <xsd:complexContent>
                        <xsd:extension base="mcp:Register-Type"/>
                </xsd:complexContent>
        </xsd:complexType>
        
        <xsd:complexType name="Gauge-Ref-Type">
                <xsd:attribute name="ref" type="mcp:Register-Name-Type" use="required"/>
        </xsd:complexType>
        
        <xsd:complexType name="Multi-Gauge-Ref-Type">
                <xsd:attribute name="lwref" type="mcp:Register-Name-Type" use="required"/>
                <xsd:attribute name="hwref" type="mcp:Register-Name-Type" use="required"/>
        </xsd:complexType>
        
        <xsd:complexType name="WaterMark-Type">
                <xsd:complexContent>
                        <xsd:extension base="mcp:Register-Type">
                                <xsd:choice>
                                        <xsd:element name="lwg" type="mcp:Gauge-Ref-Type"/>
                                        <xsd:element name="hwg" type="mcp:Gauge-Ref-Type"/>
                                        <xsd:element name="bwg" type="mcp:Multi-Gauge-Ref-Type"/>
                                </xsd:choice>
                        </xsd:extension>
                </xsd:complexContent>
        </xsd:complexType>
        
        <xsd:element name="register" type="mcp:Register-Type" abstract="true"/>
        <xsd:element name="counter" type="mcp:Counter-Type" substitutionGroup="mcp:register"/>
        <xsd:element name="usage" type="mcp:Usage-Type" substitutionGroup="mcp:register"/>
        <xsd:element name="lwGauge" type="mcp:LowWaterGauge-Type" substitutionGroup="mcp:register"/>
        <xsd:element name="hwGauge" type="mcp:HighWaterGauge-Type" substitutionGroup="mcp:register"/>
        <xsd:element name="waterMark" type="mcp:WaterMark-Type" substitutionGroup="mcp:register"/>
        
        <xsd:complexType name="Helper-Class-Type">
                <xsd:sequence>
                        <xsd:element name="package" type="mcp:Package-Name-Type"/>
                        <xsd:element name="class" type="mcp:Class-Name-Type"/>
                        <xsd:element name="collector" type="mcp:Precollector-Type" minOccurs="1" maxOccurs="unbounded" />
                </xsd:sequence>
        </xsd:complexType>
        
        <xsd:complexType name="Row-Type">
                <xsd:sequence>
                        <xsd:element name="package" type="mcp:Package-Name-Type"/>
                        <xsd:element name="class" type="mcp:Class-Name-Type"/>
                        <xsd:element ref="mcp:register" maxOccurs="unbounded"/>
                        <!-- Note that merely having a precollector with a centurySecond element is enough to indicate that you require   -->
                        <!-- a century second scan, so there's no additional markup on the group to show that. -->
                        <xsd:element name="precollector" minOccurs="0" type="mcp:Helper-Class-Type">
                                <xsd:unique name="NoDuplicatePrecollectorTypes">
                                <xsd:selector xpath="mcp:collector"/>
                                <xsd:field xpath="."/>
                                </xsd:unique>
                        </xsd:element>
                </xsd:sequence>
        </xsd:complexType>
        
        <xsd:complexType name="Group-Description-Type">
                <xsd:sequence>
                        <xsd:element name="description" type="xmllib:text"/>
                        <xsd:element name="rowKey" type="xmllib:text"/>
                </xsd:sequence>
        </xsd:complexType>
        
        <xsd:complexType name="Group-Type">
                <xsd:sequence>
                        <xsd:element name="name" type="mcp:Group-Name-Type"/>
                        <xsd:element name="row" type="mcp:Row-Type">
                                <xsd:unique name="uniqueRegisterNameInRow">
                                        <xsd:selector xpath="mcp:counter|mcp:usage|mcp:lwGauge|mcp:hwGauge|mcp:waterMark"/>
                                        <xsd:field xpath="@name"/>
                                </xsd:unique>
                                <xsd:key name="lwgauge-name">
                                        <xsd:selector xpath="mcp:lwGauge"/>
                                        <xsd:field xpath="@name"/>
                                </xsd:key>
                                <xsd:key name="hwgauge-name">
                                        <xsd:selector xpath="mcp:hwGauge"/>
                                        <xsd:field xpath="@name"/>
                                </xsd:key>
                                <xsd:key name="multi-gauge-name">
                                        <xsd:selector xpath="mcp:waterMark/mcp:bwg"/>
                                        <xsd:field xpath="@lwref"/>
                                        <xsd:field xpath="@hwref"/>
                                </xsd:key>
                                <xsd:key name="unique-lwg-ref">
                                        <xsd:selector xpath="mcp:waterMark/mcp:lwg"/>
                                        <xsd:field xpath="@ref"/>
                                </xsd:key>
                                <xsd:key name="unique-hwg-ref">
                                        <xsd:selector xpath="mcp:waterMark/mcp:hwg"/>
                                        <xsd:field xpath="@ref"/>
                                </xsd:key>
                                <xsd:key name="unique-bwg-lwref">
                                        <xsd:selector xpath="mcp:waterMark/mcp:bwg"/>
                                        <xsd:field xpath="@lwref"/>
                                </xsd:key>
                                <xsd:key name="unique-bwg-hwref">
                                        <xsd:selector xpath="mcp:waterMark/mcp:bwg"/>
                                        <xsd:field xpath="@hwref"/>
                                </xsd:key>
                                <!-- Unfortunately, I cannot figure out a way to -->
                                <!-- prevent someone from referencing a gauge    -->
                                <!-- simultaneously from a l/hwg and bwg element -->
                                <!-- without using something like schematron.    -->
                                <xsd:keyref name="lwg-ref" refer="mcp:lwgauge-name">
                                        <xsd:selector xpath="mcp:waterMark/mcp:lwg"/>
                                        <xsd:field xpath="@ref"/>
                                </xsd:keyref>
                                <xsd:keyref name="hwg-ref" refer="mcp:hwgauge-name">
                                        <xsd:selector xpath="mcp:waterMark/mcp:hwg"/>
                                        <xsd:field xpath="@ref"/>
                                </xsd:keyref>
                                <xsd:keyref name="bwg-lwref" refer="mcp:lwgauge-name">
                                        <xsd:selector xpath="mcp:waterMark/mcp:bwg"/>
                                        <xsd:field xpath="@lwref"/>
                                </xsd:keyref>
                                <xsd:keyref name="bwg-hwref" refer="mcp:hwgauge-name">
                                        <xsd:selector xpath="mcp:waterMark/mcp:bwg"/>
                                        <xsd:field xpath="@hwref"/>
                                </xsd:keyref>
                        </xsd:element>
                        <xsd:element name="documentation" type="mcp:Group-Description-Type"/>
                        <xsd:element name="generatedOn" type="mcp:OM-NE-List-Type"/>
                </xsd:sequence>
                <xsd:attribute name="traffic" type="xsd:boolean" default="false"/>
                <xsd:attribute name="neLevel" type="xsd:boolean" default="false">
                    <xsd:annotation>
                        <xsd:documentation>
                            This attribute is set to true for those OM groups that measure
                            something that can only be counted on the active network element
                            instance.  Many call-related counts require this attribute to
                            be set to "true" to ensure that any averages are calculated
                            correctly.
                        </xsd:documentation>
                    </xsd:annotation>
                </xsd:attribute>
        </xsd:complexType>
        
        <xsd:element name="omGroups">
                <xsd:annotation>
                        <xsd:documentation xml:lang="en">
                                Each OM row class can belong to one and only one OM group.
                                That is more restrictive than the underlying framework, but
                                it would be difficult to impossible to make the documentation 
                                markup work since the meaning of the fields would change depending on 
                                the OM group to which the class belonged.
                        </xsd:documentation>
                </xsd:annotation>
                <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="install" type="mcp:OM-Installation-Type" minOccurs="1" maxOccurs="unbounded"/>
                            <xsd:element name="group" type="mcp:Group-Type" minOccurs="1" maxOccurs="unbounded"/>
                        </xsd:sequence>
                </xsd:complexType>
                <!-- Each OM group name must be unique -->
                <xsd:unique name="uniqueGroupName">
                        <xsd:selector xpath="mcp:group"/>
                        <xsd:field xpath="mcp:name"/>
                </xsd:unique>
                <!-- Each OM row class can belong to one and only one OM group.            -->
                <!-- That is more restrictive than the underlying framework, but           -->
                <!-- it would be difficult to impossible to make the documentation         -->
                <!-- markup work since the meaning of the fields would change depending on -->
                <!-- the OM group to which the class belonged.                             -->
                <xsd:unique name="uniqueRowClass">
                        <xsd:selector xpath="mcp:group/mcp:row"/>
                        <xsd:field xpath="mcp:package"/>
                        <xsd:field xpath="mcp:class"/>
                </xsd:unique>
        </xsd:element>
</xsd:schema>
 
    Ce que j'ai essayé
from xml.etree import ElementTree
import csv
tree = ElementTree.parse('Omschema.xsd')
sitescope_data = open('Out.csv', 'w', newline='', encoding='utf-8')
csvwriter = csv.writer(sitescope_data)
#Create all needed columns here in order and writes them to excel file
def recurse(root):
    for child in root:
        recurse(child)
        print(child.tag)
    for event in root.findall('{http://www.w3.org/2001/XMLSchema}complexType'):
        event_data = []
        event_id = event.find('{http://www.w3.org/2001/XMLSchema}sequence')
        if event_id != None:
            event_id = event_id.text
        event_data.append(event_id)
        csvwriter.writerow(event_data)
root = tree.getroot()
recurse(root)
sitescope_data.close()
                        Depuis que vous avez tagué BeautifulSoup, voici comment procéder:
import csv
from bs4 import BeautifulSoup
soup = BeautifulSoup(your_xml, "xml")
tag_names = soup.find("xsd:complexType", {"name": "Register-Type"})
with open('data.csv', 'w') as f:
    headers = [tag['name'] for tag in tag_names.find_all("xsd:element")]
    writer = csv.DictWriter(f, fieldnames=headers)
    writer.writeheader()
 
     data.csv :
measures,description,notes
                            Jana Duggar a été ouverte sur sa recherche de l'amour. Voici tout ce qu'elle a dit sur le sujet et sa fenêtre de mariage de cinq ans.
La star d'Outlander, Sam Heughan, a récemment révélé ce qu'il retirera du tournage pour se souvenir de Jamie Fraser, le rôle qui a fait de lui une star.
"She Loves You" a été écrite en une heure, enregistrée en une journée, et a été la chanson des Beatles avec l'une de leurs meilleures performances de leur carrière.
Dolly Parton et sa grand-mère Bessie avaient une relation spéciale. Grand-mère Parton était très malade, mais cela n'a pas empêché Dolly de lui faire des farces.
Vous pensez peut-être que le chêne ou le noyer sont résistants, mais en matière de bois les plus durs au monde, ils sont loin derrière.
L'océan regorge de beauté, mais il abrite aussi certaines des créatures marines les plus terrifiantes de la planète. Nombre de ces animaux vivent dans les profondeurs obscures et sous haute pression des abysses.
Que vous affrontiez des créatures hostiles ou vous prépariez pour des affrontements PvP, connaître les meilleurs enchantements d'épée dans Minecraft peut vous donner un avantage considérable. Enchanter vos épées vous permet d'infliger plus de dégâts, d'augmenter le butin des créatures et d'accroître leur durabilité.
Quand on parle de pays socialistes, on imagine souvent un contrôle total de l'État et l'absence de propriété privée. Mais en réalité, les économies socialistes sont très diverses.
                    « Enfants » laisse tomber un caméo de grand nom et des nouvelles dévastatrices
                    Ce RAV4 est déclaré en excellent état et est prêt pour un jeu de chaises musicales.
                    Des images de drones ont montré des pompiers semblant lutter pour éteindre l'incendie.
                    Eyes of Wakanda est directement lié au MCU, ainsi que des mises à jour sur X-Men '97, What If..., Daredevil, et plus encore.
Ava Gardner a été mariée à Mickey Rooney et Frank Sintra, et a fréquenté plusieurs autres stars d'Hollywood. Voici un aperçu de l'histoire amoureuse d'Ava Gardner.
John Cleese a épousé sa femme, Jennifer Wade, en 2012. Voici tout ce qu'il faut savoir sur la femme de John Cleese, Jennifer Wade.
Craig Melvin a épousé la présentatrice sportive Lindsay Czarniak en 2011. Voici tout ce qu'il faut savoir sur la femme de Craig Melvin.
Maggie Gyllenhaal et Peter Sarsgaard se sont mariés en 2009 et partagent deux filles ensemble. Voici une chronologie complète de leur relation.
Ça me frappe tout à coup, comme c'est si souvent le cas C'est à nouveau le milieu du chemin <Non, pas celui du Pacifique, toi marron, celui du carnaval> Chaque gros titre fort… ..
                    En 2022, avec la sortie de GPT-3, la compétence en écriture semble devenir moins importante. Avec l'IA, les personnes ayant une mauvaise écriture peuvent également générer du personnel de qualité.
                    Dans le monde rapide et compétitif d'aujourd'hui, la carrière d'une personne joue un rôle important dans la croissance personnelle, la stabilité financière et la satisfaction globale de la vie. Cependant, de nombreuses personnes se retrouvent prises dans un cycle incessant de stagnation et d'insatisfaction, dépérissant progressivement dans leur vie professionnelle.
                    La semaine dernière, j'ai remarqué un communiqué de presse, envoyé via PressGazette (un site Web d'information britannique). L'article annonçait qu'Acast, la société d'hébergement et de publicité de podcasts de Scandi, dirigerait un consortium d'éditeurs "probablement les plus influents" du podcasting.