1

こんにちは、次の 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 分です。私に知らせてください、私は自分自身をよりよく説明します. ありがとう!!

4

2 に答える 2

1

XPath を試してみてください。次のようなものが動作するはずです。

string firstName = String.Empty;

var xmlNode = doc.SelectSingleNode(String.Format("//Customer[@AccountNumber='{0}']/CustomerInfo/firstName", _AccNumber));
if (xmlNode != null)
    firstName = xmlNode.InnerText;
于 2010-12-14T02:48:34.097 に答える
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;
        }
于 2010-12-14T04:22:48.563 に答える