Query XPath per singolo nodo con C#

venerdì 04 agosto 2006 - 17.30

astroman Profilo | Junior Member

Ho letto un pò d'articoli, ma non riesco a capire l'errore.In pratica ho un semplice file XML (come segue)

<?xml version="1.0" ?>
<root>
<el>
<dop>11111111</dop>
<cpr>111</cpr>
<cuf>111</cuf>
<duf>aaaa aa</duf>
<imp>11111</imp>
</el>
</root>

per estrarlo, avendo importato sia il namespace XML che XML ho eseguito il seguente codice:

XmlDocument doc = new XmlDocument();
doc.Load(xml.xml);
XmlNode nl;
nl=doc.SelectSingleNode("//dop");
string testt=nl.Value;
Console.WriteLine testt;

testt mi torna sempre "null"...idee o suggerimenti per tirarmi fuori dai guai?

astroman Profilo | Junior Member

A cavolo...si vede che che ne so poco di XPath! Grazie mille per l'aiuto!

Altra domanda...anche perchè mi son accorto che il file XML ha + di un elemento...tipo questo:

<root>
<el>
<dop>11111111</dop>
<cpr>111</cpr>
<cuf>111</cuf>
<duf>aaaa aa</duf>
<imp>11111</imp>
</el>
<el>
<dop>2222222</dop>
<cpr>222</cpr>
<cuf>222</cuf>
<duf>xxxx xx</duf>
<imp>22222</imp>
</el>
</root>

Se io volessi modificare fare un loop su el e tirarmi fuori ogni elemento, tipo dop, cpr, ecc, in ogni fase del loop, come dovrei fare?

astroman Profilo | Junior Member

In effetti muovendo un pò di neuroni ero giunto ad una risposta simile!

in pratica ho fatto un loop come segue:

string dop; XmlDocument xmldoc = new XmlDocument(); xmldoc.Load(xmlpath); XmlNodeList nodelist=xmldoc.SelectNodes("//el"); for (x=0;x<nodelist.Count;x++) { dop = nodelist[x].SelectSingleNode("//dop").InnerText; }

dici che è efficiente lo stesso o è meglio loopare sui ChildNodes?

astroman Profilo | Junior Member

A ok...ma mi puoi mettere un esempio del loop su ChildNodes tanto per farmi un idea?:)

astroman Profilo | Junior Member

Ok!

Grazie mille!

astroman Profilo | Junior Member

Beh forse ho gridato "vittoria" prima del previsto...

l'ho provato ma non è corretto il codice...

ho ipotizzato che sia così, mi dai conferma?

XmlDocument xmldoc = new XmlDocument(); xmldoc.Load(path_xml); foreach(XmlNode node in xmldoc.ChildNodes) { n1 = node["dop"].InnerText; n2 = node["cpr"].InnerText; ... }

o ho capito male?

astroman Profilo | Junior Member

In realtà ho dovuto ripristinare il codice precedente perchè il discorso funzionava in questo modo

XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(path_xml);
XmlNodeList nodelist=xmldoc.SelectNodes("//el");
foreach (XmlNode nl in nodelist)
{
n1=nl.ChildNodes.Item(0).InnerText;
n2=nl.ChildNodes.Item(1).InnerText;
...
}

E questo (almeno credo ma ne son quasi convinto) dovrebbe funzionare...il problema è che non son sicuro dell'ordine dei vari nodi che mi son passati, conseguentemente non vado molto bene a mettere l'indice dell'elemento...andrei molto meglio a mettere il nome dell'elemento come fatto in precedenza.
Si può ovviare al problema o non ce modo?
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