Come ottenere il valore dell’attributo utilizzando SelectSingleNode?

Sto analizzando un documento xml, ho bisogno di trovare il valore gid (un attributo) (3810).

Basato su SelectSingleNode() . Ho trovato che non è facile trovare il nome dell’attributo e il suo valore.

Posso usare questo metodo o devo passare a un altro modo.

In allegato è il mio codice.

Come posso usare il book obj per ottenere il valore dell’attributo 3810 per gid . Grazie.

Il mio file test.xml come sotto

               

Ho scritto il test.cs come di seguito

 public class Sample { public static void Main() { XmlDocument doc = new XmlDocument(); doc.Load("test.xml"); XmlNode book; XmlNode root = doc.DocumentElement; book = root.SelectSingleNode("Attributes[AttrDir[@name='EFEM']/AttrDir[@name='Aligner']/AttrDir[@name='SequenceID']/AttrObj[@text='Slot01']]"); Console.WriteLine("Display the modified XML document...."); doc.Save(Console.Out); } } 

[Aggiornamento 06/10/2010]

  1. Il file xml è un file complesso. Incluso migliaia di gid. Ma per ogni Xpath, il gid è unico.

  2. Carico il file xml in un controllo TreeView. this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect); . Quando si è verificato l’evento treeView1_AfterSelect , e.Node.FullPath restituirà come valore stringa.

  3. e.Node.FullPath la stringa Value e.Node.FullPath . Poi ho ottenuto il membro di XPath Above. Poi ho provato a trovare quale elemento del gid è stato selezionato.

Ho bisogno di trovare il valore gid come valore di ritorno.

Tu puoi scrivere

 XmlAttribute gidAttribute = (XmlAttribute)book.Attributes.GetNamedItem("gid"); String gidValue = null; if (gidAttribute!=null) value = gidAttribute.Value; 

In alternativa, espandere Xpath per recuperare l’attributo, ad es

 Attributes[AttrDir[@name='EFEM']/AttrDir[@name='Aligner']/AttrDir[@name='SequenceID']/AttrObj[@text='Slot01']]/@gid 

Se @gid è univoco, puoi semplicemente usare Xpath

 "//AttrObj[@gid='3810']" 

Per recuperare il nodo desiderato con l’ID specificato. Ma nota che ogni richiesta cercherà attraverso l’intero documento. Sarà più efficiente recuperare tutti i nodes e quindi inserirli in una mappa, digitata da id.

 "//AttrObj[@gid]" 

Usa XmlNode.SelectNodes per recuperare un elenco di tutti gli AttrObj con un attributo @gid.

È ansible interrogare XmlDocument stesso non DocumentRoot :

 XmlDocument doc = new XmlDocument(); XmlNode book = doc.SelectSingleNode(".."); if (book != null) { XmlAttribute gid = book.Attributes["gid"]; if (gid != null) { string value = gid.Value; } } 

Il problema qui era che il tuo XPath era tutto sbagliato. Hai avuto questo:

 Attributes[AttrDir[@name='EFEM']/AttrDir[@name='Aligner']/AttrDir[@name='SequenceID']/AttrObj[@text='Slot01']] 

che seleziona o non seleziona l’elemento Attributi a seconda che tutti i nomi corrispondano. Questo XPath dovrebbe portarti direttamente all’attributo gid che desideri:

 Attributes/AttrDir[@name='EFEM']/AttrDir[@name='Aligner']/AttrDir[@name='SequenceID']/AttrObj[@text='Slot01']/@gid