Bonjour,
J'ai récupéré un fichier XML open source très volumineux (>30 Mo)
-Ce fichier va évoluer (re DL régulièrement fonction des mises à jour) donc je ne peut pas faire de conversion en un autre format .
-Je ne fait dessus que de la lecture (pas d'écriture).
-Je souhaite un accès rapide par flux sans chargement du fichier XML dans son entier (ou peut être une bonne fois pour toute au démarrage mais sans bouffer la mémoire).
Que me conseillez-vous comme approche?
XmlTextreader -> conseil de l'abandonnée au profit de XMLReader
Xml to Linq -> sympas pour les requêtes mais nécessite de charger la base en entier au préalable (enfin je crois)
XElement -> idem (enfin je crois)
Xpath via XmlNodeList pas mal mais j'en chie pour faire mes requêtes...
le DTD est de cette forme
je souhaite des requêtes type :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 <!ELEMENT WN (SYNSET+)> <!ELEMENT sl.dbxml (SYNSET+)> <!ELEMENT SYNSET (STAMP?, ILR*, SUMO*, G_SYN?, ID, SYNONYM, DEF, USAGE*, SNOTE?, BCS?, DOMAIN?, NL*, POS)> <!--ELEMENT SYNSET (ID | POS | SYNONYM | ILR | DEF | USAGE | SNOTE | BCS | DOMAIN | NL | SUMO | G_SYN | STAMP)+ --> <!ELEMENT ID (#PCDATA)> <!ELEMENT POS (#PCDATA)> <!ELEMENT SYNONYM (LITERAL | WORD)+> <!ELEMENT LITERAL (#PCDATA)> <!ATTLIST LITERAL lnote CDATA #IMPLIED sense CDATA #IMPLIED> <!ELEMENT WORD (#PCDATA)> <!ELEMENT ILR (#PCDATA)> <!ATTLIST ILR type CDATA #REQUIRED> <!ELEMENT DEF (#PCDATA)> <!ELEMENT USAGE (#PCDATA)> <!ELEMENT SNOTE (#PCDATA)> <!ELEMENT BCS (#PCDATA)> <!ELEMENT DOMAIN (#PCDATA)> <!ELEMENT NL (#PCDATA)> <!ELEMENT SUMO (#PCDATA)> <!ATTLIST SUMO type CDATA #REQUIRED> <!ELEMENT G_SYN (#PCDATA)> <!ELEMENT STAMP (#PCDATA)>
-chercher dans le fichier XML, uniquement dans les nœuds LITERAL la valeur "blabla". (la c'est facile)
-a partir de cette valeur remonte pour atteindre le nœud le plus haut (SYNSET) et récupère son ID (j'arrive a afficher tous ce qui se trouve entre les balises <SYNSET> mais je ne sais pas l'exploiter.)
-récupère tous ces ID puis trouve la valeur <POS> (la aussi ça va) plus bas dans l'arbre que LITERAL.
Voila le type de requête. J'ai tester la plupart des options rapidement (j'ai du mal avec les saut de nœud) mais je ne sais laquelle choisir.
Merci de votre aide.
Partager