在xml文件中搜索数据c#

时间:2012-08-03 00:12:28

标签: c# xml search

我正在尝试在xml文件中搜索数据。如果找到,它将弹出MessageBox并显示找到的所有数据。

这是我的代码。

DataView dv;
        DataSet ds = new DataSet();
        ds.ReadXml("C:\\Users\\HDAdmin\\Documents\\SliceEngine\\SliceEngine\\bin\\Debug\\saya.xml");
        dv = new DataView(ds.Tables[0]);
        dv.Sort = "Name";
        int index = dv.Find("Name");
        if (index == -1)
        {
            MessageBox.Show("Item Not Found");
        }
        else
        {
            MessageBox.Show(dv[index]["Name"].ToString()); 
        }

但它总是说未找到该项目。

然后我试着这样做。

    XmlDocument xml = new XmlDocument();            
            xml.Load("C:\\Users\\HDAdmin\\Documents\\SliceEngine\\SliceEngine\\bin\\Debug\\saya.xml");
            XmlNodeList xnList = xml.SelectNodes("/Patient/Patient/Name");
            foreach (XmlNode xn in xnList)
            {
                string name = xn["Name"].InnerText;
                listBox21.Items.Add(name);
}

对于此代码,我试图将其放入列表框中。通过这样做,它说它是一个空对象。

下面的

是我的xml文件。

    <Patient>
       <Patient>
         <Level>0</Level>
         <Name>w</Name>
         <Gender>0</Gender>
      </Patient>
   </Patient>

任何人都可以帮助我。

4 个答案:

答案 0 :(得分:2)

我个人更喜欢像这样使用LINQ to XML:

// using System.Xml.Linq;

var doc = XDocument.Load(@"C:\path\to\file.xml");
foreach (var child in doc.Descendants("Name"))
{
    MessageBox.Show(child.Value);
}

答案 1 :(得分:1)

您是否尝试过从 XMLDocument 获取子节点?

例如:

    // Load up the document
    XmlDocument formXml = new XmlDocument();
    formXml.LoadXml(@"<Patient> 
                      <Patient> 
                        <Level>0</Level> 
                        <Name>w</Name> 
                        <Gender>0</Gender> 
                      </Patient> 
                      </Patient>");


  // get the children nodes from the root
  var children = formXml.ChildNodes;
  // get the first or you can loop through if your xml has more children nodes

  foreach (var child in children)
  {
       listBox21.Items.Add(child.Name); // or something similar
  }

看看:

答案 2 :(得分:1)

你必须考虑你的代码是好的!但问题出在这里:

xn["Name"].InnerText

表示xn代表/Patient/Patient/Name,你只需要这样做:

xn.InnerText

获得它的价值。

答案 3 :(得分:0)

除非xml文件中有名为“Name”的人,否则

'int index = dv.Find(“Name”);'

应该是

'int index = dv.Find(“Joe”); //或其他名称'