2013-01-24 13 views
12

ho trovato risposte per la ricerca di nodi XML utilizzando LINQ, ma mi sono limitato a C# con .NET 2.Cerca file XML per i nodi con specifico valore di attributo in .NET 2

voglio aprire un singolo file XML (~ 50 KB, tutto il testo semplice) e cercare tutti i nodi <Tool> con attributo name con un valore specifico.

Sembra che XmlDocument.SelectNodes() potrebbe essere quello che sto cercando, ma non conosco XPath. È questo il modo giusto e, in tal caso, come sarebbe il codice?

risposta

22

È possibile utilizzare XPath in XmlDocument.SelectNodes quali SelectNodes("//ElementName[@AttributeName='AttributeValue']")

<root> 
    <element name="value1" /> 
    <element name="value2" /> 
    <element name="value1" /> 
</root> 

XmlDocument xDoc = new XmlDocument(); 
// Load Xml 

XmlNodeList nodes = xDoc.SelectNodes("//element[@name='value1']"); 
// nodes.Count == 2 

Here è possibile trovare alcuni esempi XPath aggiuntivi

+1

La vecchia scuola, funziona ancora bene. –

1

che si potrebbe fare qualcosa di simile (beh, rustico, ma ho l'idea), utilizzando GetElementsByTagName

var myDocument = new XmlDocument(); 
myDocument.Load(<pathToYourFile>); 
var nodes = myDocument.GetElementsByTagName("Tool"); 
var resultNodes = new List<XmlNode>(); 
foreach (XmlNode node in nodes) 
{ 
    if (node.Attributes != null && node.Attributes["name"] != null && node.Attributes["name"].Value == "asdf") 
    resultNodes.Add(node); 
} 
+0

Non penso che 'var' sia .NET2 ma è abbastanza chiaro. –

+0

@John Hmmm, beh, puoi usarlo in .Net2 in alcune condizioni: vedi http://weblogs.asp.net/shahar/archive/2008/01/23/use-c-3-features-from-c -2-and-net-2-0-code.aspx –

+2

funziona molto bene, ma la risposta XPath è semplicemente più elegante per il mio scopo. –

Problemi correlati