[英]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.