Как получить доступ к innerText определенного XML-узла - PullRequest
1 голос
/ 14 декабря 2010

Привет У меня есть следующий фрагмент XML:

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

из файла XML большего размера.Я хочу получить доступ к <firsName> в C #.В настоящее время я делаю следующее:

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

        }
    }

Когда я смотрю searchNode в отладчике, я вижу в элементе просмотра результатов [0], который имеет localName CustomerInfo, как вы ожидаете.Таким образом, в имени отладчика имя имеет следующий путь:

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

, если это имеет смысл?

Есть ли лучший способ сделать это?(без LINQ)?Извиняюсь, если что-то не ясно .... его 2:30 утра!Дайте мне знать, и я объясню лучше.Спасибо !!

Ответы [ 2 ]

1 голос
/ 14 декабря 2010

Я думаю, что xpath настолько сложен для понимания, поэтому лучше использовать функцию GetElementsByTagName

XmlDocument doc = new XmlDocument();
        doc.Load(@"sample.xml");
        XmlNodeList firstNameNodes =  doc.GetElementsByTagName("firstName");
        foreach (XmlNode node in firstNameNodes)
        {
            string firstName =  node.InnerText;
        }
1 голос
/ 14 декабря 2010

Попробуйте XPath .. что-то вроде этого должно работать:

string firstName = String.Empty;

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