我的目的是创建一个程序,创建一个新文件目标,从另一个文件中获取一些值。 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和写入文件,而不仅仅是最后一个值?
答案 0 :(得分:1)
有很多方法可以做到这一点。
使用XmlReader上的简单迭代
using XPath/XQuery query (XmlDocument.DocumentElement.SelectNodes("\\chairs")
)
使用Linq2Xml和Xpath
但是使用XML的最方便的方法之一(当您事先知道模式时)是使用XSD.exe并为您的模式生成类,然后只需deserialize您的xml到类和使用C#类。
答案 1 :(得分:0)
试试这个:
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
将包含其中的所有节点,并可用作集合。您可以根据需要进行连接,但初始代码中的赋值会建议您每次只覆盖该值。