c# - 在c#中检索xml文件中具有相同关键字的其他数据

标签 c# xml

我将所有数据保存在 xml 文件中。

<myself>
  <name>sara</name>
  <age>20</age>
  <gender>female</gender>
</myself>
<myself>
   <name>bob</name>
   <age>29</age>
   <gender>male</gender>
</myself>

并且有搜索框,用户可以根据类型和关键字搜索所有数据。为此,我将按名称和性别分为两种类型。

因此,一旦用户选择姓名并将关键字设置为 sara,输出将显示关于她的所有信息。

应显示输出示例

sara
20
female

对于这个输出,我让它与每个自己的文本框一起显示。有 3 个文本框标题名称、年龄和性别。

XmlDocument xml = new XmlDocument();            
        xml.Load("C:\\Users\\HDAdmin\\Documents\\Fatty\\SliceEngine\\SliceEngine\\bin\\Debug\\saya.xml");
        XmlNodeList xnList = xml.SelectNodes("/myself");            
        foreach (XmlNode xn in xnList)
        {                
            string name = xn.InnerText;                
            nameBox.Text = nameBox.Text + " " + name;
            string age = xn.InnerText;                
            ageBox.Text = ageBox.Text + " " + age;
            string gender = xn.InnerText;                
            genderBox.Text = genderBox.Text + " " + gender;
        }

我已经尝试使用 XmlNodeList xnList = xml.SelectNodes("/myself"); 但它会打印出关于 sara 和 bob 的所有信息。

所以我猜我可以把 xml 文件变成这样

<name>sara
   <gender>female
       <age>20</age>
   </gender>
</name>

但我认为这行不通。有办法吗?

这是保存数据的方式。

XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load("C:\\Users\\HDAdmin\\Documents\\SliceEngine\\SliceEngine\\bin\\Debug\\saya.xml");
                XmlElement contentElement = xmlDoc.CreateElement("myself");

                XmlElement nameEl = xmlDoc.CreateElement("name");
                XmlText xmlText = xmlDoc.CreateTextNode(berjaya[1]);
                nameEl.AppendChild(xmlText);
                contentElement.AppendChild(nameEl);
                xmlDoc.DocumentElement.AppendChild(contentElement);

                XmlElement ageEl = xmlDoc.CreateElement("age");
                ageEl.InnerText = berjaya[3];
                contentElement.AppendChild(ageEl);
                xmlDoc.DocumentElement.AppendChild(contentElement);

                XmlElement genEl = xmlDoc.CreateElement("gender");
                genEl.InnerText = berjaya[39];
                contentElement.AppendChild(genEl);
                xmlDoc.DocumentElement.AppendChild(contentElement);

++++++++++++====问题解决====++++++++++++++++++++

感谢您的帮助。这已经解决了。我正在使用@horgh 给出的答案。

这就是我学到的。

1- in my xml file, i need to have main tag.

2- using if loop to retrieve data from the keyword.

and to view the other data, its going to be like this:

string name = xn.OfType<XmlNode>().FirstOrDefault(n => n.Name == "name").FirstChild.Value;
            if (name == "sara")
            {
                nameBox.Text = nameBox.Text + " " + name;
                string age = xn.OfType<XmlNode>().FirstOrDefault(n => n.Name == "age").FirstChild.Value;
                ageBox.Text = ageBox.Text + " " + age;
                string gender = xn.OfType<XmlNode>().FirstOrDefault(n => n.Name == "gender").FirstChild.Value;
                genderBox.Text = genderBox.Text + " " + gender; 

            }

有关更多信息,您可以在下面查看。再次感谢您提供的所有帮助。

最佳答案

举个例子

    [Test]
    public void Test()
    {
        XElement root = XElement.Load(@"C:\Data.xml");
        XElement person = FindByName(root, "sara");
        if (person == null)
        {
            return;
        }
        Console.WriteLine("Name: {0}, Age: {1}, Gender: {2}",
                          person.Element("name").Value,
                          person.Element("age").Value,
                          person.Element("age").Value);
    }

    private static XElement FindByName(XContainer root, string name)
    {
        return root.Descendants()
            .Where(x => x.Name.LocalName == "name" && x.Value == name)
            .Select(x => x.Parent)
            .FirstOrDefault();
    }

Xml 文件:已添加根元素

<root>
  <myself>
    <name>sara</name>
    <age>20</age>
    <gender>female</gender>
  </myself>
  <myself>
    <name>bob</name>
    <age>29</age>
    <gender>male</gender>
  </myself>
</root>

控制台输出:

Name: sara, Age: 20, Gender: 20

建议:

  • FindByName 可能应该返回超过 1 个元素,即 List<XElement>
  • 添加具有 Name、Age、Gender 属性的 Person 类

关于c# - 在c#中检索xml文件中具有相同关键字的其他数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11856421/

相关文章:

c# - 在 foreach 循环中创建控件?

android - 布局验证不同于加载程序 android Studio

c# - 从 MVVM 属性调用异步方法

xml - 处理包含内部转义 XML 的节点

php - PHP SimpleXML 对象中消失的属性?

java - 没有名为缓存的 EntityManager 的持久性提供程序

xml - 如何使用Powershell读取o:xml?

c# - 如何从命令行运行 NUnit 并获取 xml 结果文件?

c# - 由于查询找不到我所要求的值的单个实例而出现错误,我该如何解决这个问题?

c# - C# 桌面应用程序中 Windows 窗体上的菜单