OVH Cloud OVH Cloud

Enrichir un fichier XML en C#

2 réponses
Avatar
Kalbo
Bonjour,

Je développe en C# sous visual studio.net une application qui load un XML en
mémoire et l'enrichi avec de nouveaux attributs selon les id.

Le XML:

<Range id=\"209\"><SRange id=\"210\"><URange id=\"211\"><IRange id=\"212\"
/></URange></SRange></Range>

A chaque attribut "id" que je rencontre je vais chercher en BDD un label que
je rajoute au XML afin de l'enrichir.

Le problème c'est que mon code ne voit que que l'id sur l'élément racine et
pas les autres éléments. Je ne comprends pas pq.

Voici le code en question :

public string EnrichXML(string XMLDoc, Int16 LanguageId)
{
string XMLEnriched = null;
string lbl = null;

XmlDocument xml = new XmlDocument();

try
{
xml.LoadXml(XMLDoc);
}
catch(Exception e)
{
throw new System.NotImplementedException("xxx", e);
}

Sagem.Prism.Translations.Translations Translation = new
Sagem.Prism.Translations.Translations();

foreach (XmlElement elt in xml.SelectNodes("*[@id]"))
{

Translation.GetLabelTranslationById(Convert.ToInt32(elt.GetAttribute("id")),
LanguageId, out lbl);
//elt.AppendChild(xml.CreateAttribute("label")).Value = lbl;
elt.SetAttributeNode(xml.CreateAttribute("label")).Value =
lbl;
}

XMLEnriched = xml.OuterXml;

return XMLEnriched;
}

Translation est un objet qui me permet d'aller chercher le label en BDD par
rapport à l'ID.

Je ne comprends pas pourquoi mon programme n'enrichit pas les autres éléments.

Merci pour votre aide.
Kalbo

2 réponses

Avatar
Ambassadeur Kosh
pas *[@id]
mais //*[@id]

écrire *[@id] et l'appliquer à la racine, c'est faire /*[@id].
Avatar
Kalbo
Ca marche!!
Merci bcp en XPATH je suis pas très bon.

Kalbo.

"Ambassadeur Kosh" a écrit :

pas *[@id]
mais //*[@id]

écrire *[@id] et l'appliquer à la racine, c'est faire /*[@id].