如何从相同的名称获取所有值xml c#
问题描述:
我的目的是创建一个程序,该程序创建一个新的文件目标,该目标从另一个文件获取一些值。 XML文件:如何从相同的名称获取所有值xml c#
<?xml version="1.0"?>
<house>
<chairs count="3">
<chairs>a</chairs>
<chairs>b</chairs>
<chairs>c</chairs>
</chairs>
</house>
我所做的:
static void Main(string[] args)
{
using (XmlReader reader = XmlReader.Create("file.xml"))
{
while (reader.Read())
{
if (reader.IsStartElement())
{
switch (reader.Name)
{
case "chairs":
if (reader.Read())
{
string l;
l = reader.Value.Trim();
//(*)
}
break;
}
}
}
}
// (**)f = l + " ";
如果我写在*行:
Console.WriteLine(l), it will print me:
a
b
c
但如果我删除(*)和我取消注释(**),在新创建的文件中它只显示c,因为我认为它由于连接而覆盖了a和b。 可以取所有值a,b,c并在文件中写入,而不仅仅是最后一个值?
答
试试这个:
static void Main(string[] args)
{
List<string> strings = new List<string>();
using (XmlReader reader = XmlReader.Create("file.xml"))
{
while (reader.Read())
{
if (reader.IsStartElement())
{
switch (reader.Name)
{
case "chairs":
if (reader.Read())
{
strings.Add(reader.Value.Trim());
}
break;
}
}
}
}
这样的名单strings
将在它的所有节点,可以用来作为一个集合。如果你想要,你可以连接,但是初始代码中的赋值意味着你每次只覆盖这个值。
答
有很多方法可以做到这一点。
使用简单的迭代过的XmlReader为你使用Linq2Xml使用XPath
但最convi的人做
using XPath/XQuery query (XmlDocument.DocumentElement.SelectNodes("\\chairs")
)
处理XML的很好方式(当你事先知道模式时)是使用XSD.exe并为你的模式生成类,然后用deserialize将你的xml转换为类并使用C#类。
谢谢。你的想法帮助了我。 – Nero