CMatt
Messages postés38Date d'inscriptionvendredi 16 janvier 2004StatutMembreDernière intervention15 octobre 2010
-
11 avril 2005 à 16:02
sebseb42
Messages postés495Date d'inscriptiondimanche 6 juillet 2003StatutMembreDernière intervention 9 novembre 2007
-
14 avril 2005 à 00:28
Bonjour à tous!
Je me suis mit récement à PHP, et dans le cadre d'un projet personnel,
j'ai eu besoin de parser un fichier XML personnalisé
(http://www.phpcs.com/code.aspx?ID=21484 voici la source qui m'a aidé à
réaliser un parser XML simple en PHP). Jusqu'ici, pas de problème.
Mais maintenant, je voudrais aussi pouvoir disposer d'un code en C# qui
fait exactement la même chose, c'est à dire un code qui me retourne un
"noeud" racine (du genre Hashtable) avec une clé "TAG", une clé
"VALEUR" et enfin une clé "ELEMENTS" qui me retourne une liste des
noeuds enfants.
J'ai essayer de trouver ce que je cherche dans la documentation du
framework, mais je me suis noyé littéralement dans les classes
utilisant des codes XML divers et variés...
Si ça peut aider, voici l'organisation d'un fichier XML que je cherche à parser :
sebseb42
Messages postés495Date d'inscriptiondimanche 6 juillet 2003StatutMembreDernière intervention 9 novembre 20071 13 avril 2005 à 14:41
Ton probleme est simple, quand tu ouvre ton fichier avec mon programme, il dit ceci :
System.Xml.XmlException: There is an invalid character in the given encoding. Line 8, position 24.
donc avec Visual Studio j'ouvre ton fichier xml et je regarde la ligne 8 pos 24 :
Lainmanwë
Il y a un caractere bizarre, et pour remedier a ce probleme, il suffit de rajouter en entete de ton fichier xml une balise explicitant le format de ton fichier :
<?xml version="1.0" encoding="ascii"?>
et ensuite le parseur xml sais comment lire ton fichier.
Ici, pour ton fichier l'encoding a utiliser est "ascii" mais les carateres "bizarres" seront remplacer par des ?
Ce que tu peux faire, c'est l'ouvrir avec Visual Studio, rajouter ceci :
<?xml version="1.0" encoding="utf-8"?>
et enregistrer, et la tu pourra aussi le charger avec n'importe quel parseur xml, et tu aura aussi les caracteres non-imprimable.
sebseb42
Messages postés495Date d'inscriptiondimanche 6 juillet 2003StatutMembreDernière intervention 9 novembre 20071 11 avril 2005 à 20:17
Je ne sais pas si il a fait ce qu'on lui sugerais dans son article,
mais je pense que je vais poster un code-tuto pour passer un fichier
XML en Tree et vice-versa, tres prochainement.
Vous n’avez pas trouvé la réponse que vous recherchez ?
CMatt
Messages postés38Date d'inscriptionvendredi 16 janvier 2004StatutMembreDernière intervention15 octobre 2010 12 avril 2005 à 10:13
Bonjour et merci d'avoir pris un peu de temps pour essayer de m'aider, mais mon problème reste entier...
Primo, lorsque j'essaye de charger mon exemple de fichier XML avec la
classe XmlDocument, j'ai toujours l'erreur très explicite "Erreur
système." (et comme je ne suis pas devin, je comprend rien).
Secondo, dans ton code SebSeb42, j'ai exactement la même "Erreur
système." à la ligne doc.Load(xml_file); dans ta méthode
GetTreeNodeFromXML...
Pour tester ton code, as-tu essayer de parser fichier XML contenant mon exemple?
CMatt
Messages postés38Date d'inscriptionvendredi 16 janvier 2004StatutMembreDernière intervention15 octobre 2010 12 avril 2005 à 12:23
Re,
j'ai effectivement regarder ton lien, mais le code est incomplet : par
exemple, que signifie la ligne Xml.Items.Add(xmlnode.InnerText); dans
la méthode
GetChildAtt???
Vous n'avez certainement pas regarder comment parser du Xml en PHP. Je vais vous résumer le principe.
PHP intègre un parser Xml qui utilise des délégations ; je m'explique :
le parser exécute une fonction lorsque qu'il rencontre une balise
ouvrante (par ex. <GROUPE>), une autre fonction pour traiter les
valeurs (comprises entre une balise ouvrante et une balise fermante,
par ex. <NOM>Valeur</NOM>) et enfin une dernière fonction
lorsqu'il rencontre une balise fermante (par ex. </ELEMENT>)...
N'y a-t-il rien en C# capable de faire exactement la même chose?
sebseb42
Messages postés495Date d'inscriptiondimanche 6 juillet 2003StatutMembreDernière intervention 9 novembre 20071 12 avril 2005 à 18:25
Oui j'ai tester ton bout d'XML CMat et effectivement ca ne fonctionne pas, mais le probleme viens de toi, tu aurais du faire plus de test, comme par exemple lire ton XML avec IE ou un autre viewer XML, et tu aurais vu que ton XML est erroner :
<ELEMENTS>
<ELEMENT>
<NOM>Element 1</NOM>
</ELEMENT>
<ELEMENT>
<NOM>Element 2</NOM>
</ELEMENT>
</ELEMENT> <-- ici ELEMENT n'as pas de S de fin, alors qu'il ferme la balise ELEMENTS
Pour tester le code en C#, j'utilise ce fichier en local (@"C:\PHP\Alliance.xml").
Ce fichier est valide, car j'ai réussi à générer un schéma avec Visual Studio sans aucune erreur.
Pour le "fun", j'ai volontairement ajouté une erreur de balisage et VS retourne une erreur lors de la génération du schéma.
Ton code devrait fonctionner, je suis d'accord, mais il ne fonctionne
pas, car lorsque tu charge le fichier Xml (doc.Load(xml_fichier);),
j'ai toujours la même "Erreur système.". Remarque, avant que je ne
commence à poster ici, j'avais exactement le même problème.
CMatt
Messages postés38Date d'inscriptionvendredi 16 janvier 2004StatutMembreDernière intervention15 octobre 2010 13 avril 2005 à 10:13
Re,
petit complément d'infos, j'ai tester ton code avec un autre fichier
Xml beaucoup moins "complexe" (qui ressemble à mon exemple) et
effectivement, il fonctionne parfaitement...
dibouched
Messages postés219Date d'inscriptionsamedi 21 août 2004StatutMembreDernière intervention17 juillet 20072 13 avril 2005 à 14:22
je ne pas compris si le problème est resolu
mais voila le code c'est pas mon code
Xml.Items.Add(xmlnode.InnerText); singifie d'apres ce que je voie qu'il est entrains d'ajouter dans une dropdownlist les valeur des neud
CMatt
Messages postés38Date d'inscriptionvendredi 16 janvier 2004StatutMembreDernière intervention15 octobre 2010 13 avril 2005 à 15:41
Re,
je pense que c'est la dernière fois que je poste sur ce sujet, enfin... lol
Apparement, c'était un problème d'encodage (l'encodage de mes fichiers
était ANSI) et j'était loin de me douter qu'il s'agissait d'un problème
d'encodage : allez comprendre ce que signifie "Erreur système."!!!
(j'm'en souviendrais longtemps de celle-là! )
En bref, j'ai encodé mes fichiers en UTF-8, j'ai mit "<?xml
version="1.0" encoding="utf-8"?>" au début de chaque fichiers... et
il n'y a plus de problème.
Merci infiniment pour ton aide SebSeb42!
Juste une dernière question à propos de Xml, est-ce qu'un attribut peut s'écrire avec des espaces autour d'un '='?
sebseb42
Messages postés495Date d'inscriptiondimanche 6 juillet 2003StatutMembreDernière intervention 9 novembre 20071 14 avril 2005 à 00:28
Je ne sais pas si c'est tres standard, mais le parseur XML le supporte (IE et mon programme)
J'ai regarder un peut dans le standard XML, mais je n'ai pas fouiller assez pour trouver quelque chose.
Cependant, si tu genere ton code XML avec les fonction de la classe XmlTextWriter, tu n'as jamais aucun souci de standard. Hesite pas a me demander si tu as du mal avec cette classe.