Problemi aggiungere nodo file xml con c#

lunedì 09 gennaio 2006 - 11.45

alecomo Profilo | Junior Member

la struttura del mio file xml è la seguente:
manifest -> root
organizations ->child 1
organization -> grandchild 1
item -> grandgrandchild 1
resources -> child 2
resource -> grandchild1

per aggiungere il nodo organization non ho problemi...i problemi sorgono quando devo inserire gli oggettti item...
questo è il frammento di codice che nn funziona il quale dovrebbe inserire il nodo item sotto il nodo organization
aiutatemi!!


string path = @"c:\data\imsmanifest.xml";

//carico file xml
XmlDocument Doc = new XmlDocument();
Doc.Load(path);

XmlNode NodeItem;
XmlNode currNode;

XmlNodeList insNodeList = Doc.GetElementsByTagName("Organization");

NodeItem = Doc.CreateNode(XmlNodeType.Element,"Item","");

MessageBox.Show("OK1");

//inserisce il nodo organization sotto il nodo organizations
currNode = insNodeList[0].ChildNodes[1].InsertAfter(NodeItem,insNodeList[0].ChildNodes[1].ChildNodes[0]);
MessageBox.Show("OK2");
currNode.InnerText = Item_Title.Text;
MessageBox.Show("OK3");
//aggiungo attributo
XmlAttribute Identifier_Item = Doc.CreateAttribute("Identifier");
MessageBox.Show("ok4");
Identifier_Item.Value = Item_Id.Text;
NodeItem.Attributes.Append(Identifier_Item);
MessageBox.Show("ok5");

XmlAttribute Ref_Item = Doc.CreateAttribute("Referenced Element");
MessageBox.Show("ok3");
Ref_Item.Value = Item_Ref.Text;
NodeItem.Attributes.Append(Ref_Item);
MessageBox.Show("ok4");


//salvo le modifiche
Doc.Save(path);

alecomo Profilo | Junior Member

si item è figlio di organization...
ma dove devo inserire quella riga?devo sostituirla a questa?
currNode = insNodeList[0].ChildNodes[1].InsertAfter(NodeItem,insNodeList[0].ChildNodes[1].ChildNodes[0]);
io ho problemi su questa stringa...mi sai dire dove sbaglio?

grazie!!

alecomo Profilo | Junior Member

GRAzie ho risolto...
ora il problema è un altro...voglio inserire il nodo item esclusivamente dove dico io...mi spiego meglio
il nodo organzation ha un attributo IDENTIFIER...suppondendo di avere 3 organization rispettibvamente con id = 1 , 2 , 3 io voglio inserire l'item nel nodo org avente come id 2..
come posso fare?
grazie!!

Brainkiller Profilo | Guru

>GRAzie ho risolto...
>ora il problema è un altro...voglio inserire il nodo item esclusivamente
>dove dico io...mi spiego meglio
>il nodo organzation ha un attributo IDENTIFIER...suppondendo
>di avere 3 organization rispettibvamente con id = 1 , 2 , 3
> io voglio inserire l'item nel nodo org avente come id 2..
>come posso fare?
>grazie!!

Ci sono vari metodi, puoi enumerare i nodi con un for each e quando vedi che c'è quello che vuoi tu (con id=2) aggiungere il nodo.
ciao

David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/

alecomo Profilo | Junior Member

io proprio nn riesco a risolvere...
allora il mio xml è cosi fatto:
<manifest>
<organizations>
<organization org_id="A0">
<item>
<item>
</organization>
<organization org_id="B6">
</organization>
</organizations>
</manifest>

XmlNode NodeItem;
XmlElement root;

//Create an XmlNamespaceManager for resolving namespaces.
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace"org_id", "http://www.imsproject.org/xsd/imscp_rootv1p1p2");

//prendo il nodo sotto cui aggiungere item
root = doc.DocumentElement;
XmlNode node = root.SelectSingleNode("descendant::Organization[@org_id = identifier.text]", nsmgr);

NodeItem = Doc.CreateNode(XmlNodeType.Element,"Item","");

MessageBox.Show("OK1");

//inserisce il nodo item sotto il nodo organization
currNode = node.AppendChild(NodeItem);

è giusta la sintassi??io devo scegliere l'organizzazione in base alla richiesta dell'utente che ottengo con la var identifier.text
aiutatemi!!vi prego!!!



Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5