我有一个名为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
}
}
答案 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();