我将所有数据保存在 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/