Récupérer données XML avec caractère illégal [Résolu]

Utilisateur anonyme - 16 févr. 2008 à 23:48 - Dernière réponse :  Utilisateur anonyme
- 17 févr. 2008 à 02:00
Bonsoir,

J'ai un programme qui me génère un fichier XML avec des titres de musiques diffusées.
Le problème est que ce programme me génère mon fichier XML avec des titres de chansons comportant des caractères illégaux. Exemple l'éperluette "&" qui est considéré comme illégal dans un fichier XML.
La solution pour ce problème était donc de mettre le titre de la chanson entre des balises <![CDATA[.

En gros j'avais donc fait :
<Musique><![CDATA[ Madonna & Test ]]></Musique>

Plus de problème jusque là, mais ensuite quand je veux récupérer ce résultat avec mon code en ASP.net/VB.net, il ne m'affiche plus rien à cause des balises CDATA

Ma question est donc : Comment récupérer le titre de la chansson entre mes balises <Musique> sans avoir ce problème de caractère illégal quand un titre comporte un "&" ? Je peux modifier le fichier XML mais je ne peux pas changer les titres comportant des caractères illégaux car c'est un programme indépendant qui génère les titres...

Voici mon code ASP.net :

Dim reader As XmlTextReader
Dim i AsInteger
Dim builder As System.Text.StringBuilder = New System.Text.StringBuilder(1024)
Dim NombreElements AsInteger = 0
Try
reader = New XmlTextReader(Server.MapPath("musiques.xml"))
While reader.Read()
SelectCase reader.NodeType
Case XmlNodeType.Element
If reader.HasAttributes Then
For i = 0 To reader.AttributeCount - 1
Response.Write(reader.GetAttribute(i))
Next
Response.Write("
")
EndIf
Case XmlNodeType.Text
litNow.Text = Server.HtmlEncode(reader.Value)
EndIf
EndSelect
EndWhile
Catch ex As Exception
Response.Write("Erreur " & ex.Message)
Finally
reader.Close()
EndTry

Merci.

A++
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 17 févr. 2008 à 01:53
3
Merci
Pour ta transformation, XSLT est probablement plus adapté.

Concernant CDATA, il s'agit d'un élément fils de l'élément Musique, donc basiquement, juste pour rendre "fonctionnel" ton exemple :

builder.Append(nodeList.Item(i).InnerXml)
=> builder.Append(nodeList.Item(i).FirstChild.Value)

/*
coq
MVP Visual C#
CoqBlog
*/

Merci cs_coq 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 74 internautes ce mois-ci

Commenter la réponse de cs_coq
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 17 févr. 2008 à 00:37
0
Merci
Salut,


Heu, quel est la portion du code censée lire le contenu de l'élément là dedans ?
Musique n'a pas d'attribut, et ne contient pas de noeud de type texte.

/*
coq
MVP Visual C#
CoqBlog
*/
Commenter la réponse de cs_coq
0
Merci
Hum, bonne question :)
A vrai dire, j'ai du mal pour lire de l'xml avec asp.net donc j'ai récupéré vite fait un code sur le site que j'ai essayer au plus simple de faire fonctionner...

Techniquement, je devrais tout recommencer pour avoir plus simple ?

A++
Commenter la réponse de Utilisateur anonyme
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 17 févr. 2008 à 01:06
0
Merci
Ca dépend de ce que tu veux faire au juste, je n'arrive pas à saisir le sens final du code là ?

/*
coq
MVP Visual C#
CoqBlog
*/
Commenter la réponse de cs_coq
0
Merci
En gros, j'ai un fichier xml avec les 10 derniers sons joués, et je veux afficher dans ma page ces 10 derniers sons joués sous forme :

<li>Dernier son joué</li>
<li>Denier son joué 2</li>
<li>Denier son joué 3</li>
<li>Dernier son joué 4</li>
...

En cherchant un peu, peut-être qu'un code du genre serait plus adapté : ?
Dim RootNode as XmlElement = XMLdoc.DocumentElement
Response.Write (RootNode.Attributes("Musique").Value)

A++
Commenter la réponse de Utilisateur anonyme
0
Merci
Je peux faire comme ceci aussi

Dim builder
As System.Text.StringBuilder =
New System.Text.StringBuilder(1024)

Dim XMLdoc
As XmlDocument =
New XmlDocument()
XMLdoc.Load(Server.MapPath(
"musiques.xml"))

Dim RootNode
As XmlElement = XMLdoc.DocumentElement

Dim nodeList
As XmlNodeList = RootNode.GetElementsByTagName(
"Musique")

Dim i
As
Integer
For i = 0
To nodeList.Count - 1
builder.Append(
"<li>")
builder.Append(nodeList.Item(i).InnerXml)
builder.Append(
"</li>")

Next i

XMLdoc =
Nothing
Response.Write(builder)
Mais le problème reste le même, mais le code est déjà plus propre.

A++
Commenter la réponse de Utilisateur anonyme
0
Merci
Merci, je vais faire des recherches sur la transformation XSLT alors.

En attendant, je vais quand même mettre la solution de "secours"

Merci encore.

A++
Commenter la réponse de Utilisateur anonyme

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.