2010-04-01 8 views

Répondre

2

Vous pouvez également dans un document XPath puis utilisez une requête:

var xPathDocument = new XPathDocument("myfile.xml"); 
var query = XPathExpression.Compile(@"/abc/foo[contains(text(),""testing"")]"); 

var navigator = xpathDocument.CreateNavigator(); 
var iterator = navigator.Select(query); 

while(iterator.MoveNext()) 
{ 
    Console.WriteLine(iterator.Current.Name);  
    Console.WriteLine(iterator.Current.Value);  
} 
+0

Comment afficher le nom et la valeur du noeud avec votre code? l'utilisation de la propriété Nom et valeur donne une erreur. – user268533

+0

@beginner: J'ai mis à jour ma réponse pour parcourir les résultats et imprimer le nom et la valeur de chacun. –

2

Cela permettra de déterminer si des éléments (non seulement foo) contiennent la valeur souhaitée et imprimeront le nom et il est la valeur entière de l'élément. Vous n'avez pas spécifié le résultat exact, mais cela devrait vous aider à démarrer. Si vous chargez à partir d'un fichier, utilisez XElement.Load(filename).

var xml = XElement.Parse(@"<abc> 
    <foo>data testing</foo> 
    <foo>test data</foo> 
    <bar>data value</bar> 
</abc>"); 

// or to load from a file use this 
// var xml = XElement.Load("sample.xml"); 

var query = xml.Elements().Where(e => e.Value.Contains("testing")); 
if (query.Any()) 
{ 
    foreach (var item in query) 
    { 
     Console.WriteLine("{0}: {1}", item.Name, item.Value); 
    } 
} 
else 
{ 
    Console.WriteLine("Value not found!"); 
} 
+0

comment spécifier le chemin au lieu d'écrire le code XML tags dans XElement.Parse. J'ai besoin de charger un fichier externe avec le nom "sample.xml" – user268533

+0

@beginner J'ai mis à jour le code pour le montrer (commenté ci-dessous le xml). J'avais mentionné dans mon article que vous pouviez utiliser 'XElement.Load (" sample.xml ")' ou vous pouvez aussi utiliser 'XDocument.Load (" sample.xml ")' mais si vous utilisez un 'XDocument' vous aurez besoin d'utiliser 'xml.Root.Elements (...)' (notez la propriété 'Root'). –

0

Vous pouvez utiliser LINQ pour Xml

string someXml = @"<abc> 
        <foo>data testing</foo> 
        <foo>test data</foo> 
       </abc>"; 

XDocument doc = XDocument.Parse(someXml); 

bool containTesting = doc 
    .Descendants("abc") 
    .Descendants("foo") 
    .Where(i => i.Value.Contains("testing")) 
    .Count() >= 1; 
Questions connexes