[英]How to get all the values from the same Name xml c#
我的目的是制作一个程序,该程序创建一个新文件目标,该目标从另一个文件获取一些值。 XML文件:
<?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并写入文件,而不仅仅是最后一个值?
有很多方法可以做到这一点。
像以前那样在XmlReader上使用简单的迭代
使用XPath / XQuery查询( XmlDocument.DocumentElement.SelectNodes("\\\\chairs")
)
使用Linq2Xml和Xpath
但是使用XML的最方便的方法之一(当您事先了解架构时)是使用XSD.exe并为架构生成类,然后将XML 反序列化为类并与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
将具有所有节点,并且可以用作集合。 如果需要,可以串联,但是初始代码中的赋值建议您每次都只是覆盖该值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.