将XML元素添加到XML阅读器的列表中

时间:2013-02-18 01:35:24

标签: c# .net xml list xmlreader

我有一个名为portfolio的xml文件,我将其作为字符串传递。 从元素下的组合文件中读取文件名列表。在xml文件中,我有一个名为的元素,我需要读取价格数据中的4个值并将其存储到字符串列表中。我不知道我是否正确这样做。我不知道我的参数对于foreach循环应该是什么。

XML文件:

<priceData>
    <file name="ibmx.xml"/>
    <file name="msft.xml"/>
    <file name="ulti.xml"/>
    <file name="goog.xml"/>
</priceData>

这是我的C#函数

public static  void readPortfolio(string filename)
{
    XmlTextReader reader = new XmlTextReader(filename);
    reader.Read();
    List<string> priceDataFile = new List <string> ();
    foreach(var file in reader) //Don't know what the parameters should be.
    {
        priceDataFile.Add(reader.Value); //Not sure if I am passing what I want
    }
}

3 个答案:

答案 0 :(得分:0)

你可以这样做。以下内容将每个属性的文件名添加到列表中 替换我已使用您的路径位置声明.XML文件副本的位置。

XDocument document = XDocument.Load(@"C:\Sample_Xml\PriceData.xml");
List<string> priceDataFile = new List<string>();
var priceData = (from pd in document.Descendants("priceData")
                  select pd);

foreach (XElement priceValue in priceData.Elements())
{
    priceDataFile.Add(priceValue.FirstAttribute.Value.ToString());
}

这是你的priseDataFile列表内容的样子 在QuickWatch中查看它

[0] "ibmx.xml"
[1] "msft.xml"
[2] "ulti.xml"
[3] "goog.xml"

答案 1 :(得分:0)

使用XDocument类是解决它的好方法。但是如果你想使用XmlTextReader类,代码已经列出如下。然后,您将获得包含XML文件列表的结果。在其他方面,name是示例代码中的一个属性。所以你应该使用reader.GetAttribute(“name”)来获取价值。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace XmlReaderTest
{
    class Program
    {
        static void Main(string[] args)
        {
            XmlTextReader reader = new XmlTextReader("../../Portfolio.xml");
            reader.WhitespaceHandling = WhitespaceHandling.None;
            List<string> priceDataFile = new List<string>();
            while (reader.Read())
            {
                if (reader.Name == "file")
                {
                    priceDataFile.Add(reader.GetAttribute("name"));
                }
                else
                    continue;
            }

            reader.Close();

            foreach (string file in priceDataFile)
            {
                Console.WriteLine(file);
            }

            Console.ReadLine();
        }
    }
}

答案 2 :(得分:0)

使用LINQ to XML(.NET 3.0 +):

XDocument doc = XDocument.Load(path);
List<string> list = doc.Root
                       .Elements("file")
                       .Select(f => (string)f.Atribute("name"))
                       .ToList();