2010-12-14 49 views
1

Salut je le fragment XML suivant:Comment puis-je accéder innerText d'un XMLnode spécifique

<Customer AccountNumber="4"> 
    <CustomerInfo> 
     <firstName>Andrew</firstName> 
     <lastName>Walker</lastName> 
    </CustomerInfo> 
    <Transactions> 
     <AccountBalance>595848584.4</AccountBalance> 
    </Transactions> 
    </Customer> 

à partir d'un fichier XML plus. Je veux accéder au <firsName> en C#. Actuellement, je suis en train de faire ce qui suit:

foreach (XmlNode customer in root) 
    { 
     i++; 
     if(_AccNumber== Convert.ToInt32(customer.Attributes[0].Value)) 
     { 
      searchNode = CustNodes[(i - 1)]; 
      string _firstName = searchNode.FirstChild.FirstChild.InnerText; 

     } 
    } 

Quand je regarde searchNode dans le débogueur que je peux voir dans l'élément des résultats de vue [0] qui a une localNameCustomerInfo que vous attendez. Donc, dans le débogueur prénom a le chemin suivant:

searchNode -> [0].[0].[0].value 

si cela a du sens?

Existe-t-il une meilleure façon de procéder? (sans LINQ)? Excuses, si quelque chose n'est pas clair .... ses 2h30! Faites le moi savoir et je m'expliquerai mieux. Merci!

+0

pourquoi wont vous utilisez LINQ? linq est fait pour des choses comme ça ... –

+0

@Pauli: s'il utilise .NET 2.0, LINQ n'est pas disponible. –

+0

vrai, mais laisse retag la question comme 2.0 alors :) –

Répondre

1

Je pense que XPath est tellement difficile à comprendre, afin de mieux utiliser la fonction GetElementsByTagName

XmlDocument doc = new XmlDocument(); 
     doc.Load(@"sample.xml"); 
     XmlNodeList firstNameNodes = doc.GetElementsByTagName("firstName"); 
     foreach (XmlNode node in firstNameNodes) 
     { 
      string firstName = node.InnerText; 
     } 
1

Essayez XPath .. quelque chose comme cela devrait fonctionner:

string firstName = String.Empty; 

var xmlNode = doc.SelectSingleNode(String.Format("//Customer[@AccountNumber='{0}']/CustomerInfo/firstName", _AccNumber)); 
if (xmlNode != null) 
    firstName = xmlNode.InnerText;