如何访问特定XMLnode的innerText

时间:2010-12-14 02:25:40

标签: c# xml c#-2.0 xmlnode

您好 我有以下XML片段:

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

来自更大的XML文件。我想访问C#中的<firsName>。 目前我正在做以下事情:

    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 个答案:

答案 0 :(得分:1)

尝试XPath ..这样的事情应该有效:

string firstName = String.Empty;

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

答案 1 :(得分:1)

我认为xpath理解起来要复杂得多,所以最好使用GetElementsByTagName函数

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