use*_*674 2 c# xml linq xmlreader
我一直在使用XDocument结合LINQ to XML来加载xml文件并填充我的类.
但现在我的任务是确保我的程序可以处理所有大小的XML文档,这意味着我需要使用XML Reader,此时我无法理解操纵XMLReader来填充我的类.
目前我有以下类填充:
public class DataRecord
{
private List<Fields> field = new List<Fields>();
public string ID { get; set; }
public string TotalLength { get; set; }
public List<Fields> MyProperty
{
get { return field; }
set { field = value; }
}
}
internal class Fields
{
public string name { get; set; }
public string startByte { get; set; }
public string length { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
我一直在尝试切换语句来强制执行xmlreader以提供来自我的数据来填充类.例如:
using (XmlReader reader = XmlReader.Create(filename))
{
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element:
switch (reader.Name)
{
case "DataRecord":
var dataaa = new dataclass.DataRecord();
break;
}
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
但正如我所说,这是一个例子,我已经搜索了很多年,试图找到答案,但我感到困惑.希望有人可以帮我们解决问题.
您可以使用XmlReader在文档中移动,但随后使用加载每个元素XElement.
这是一个简短的例子:
using System;
using System.Xml;
using System.Xml.Linq;
class Test
{
static void Main()
{
using (var reader = XmlReader.Create("test.xml"))
{
while (reader.ReadToFollowing("foo"))
{
XElement element = XElement.Load(reader.ReadSubtree());
Console.WriteLine("Title: {0}", element.Attribute("title").Value);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用示例XML:
<data>
<foo title="x" /><foo title="y">asd</foo> <foo title="z" />
</data>
Run Code Online (Sandbox Code Playgroud)
(略微不一致只是为了表明它可以处理带有内容的元素,它们之间没有空格的元素,以及它们之间有空格的元素.)
然后显然在循环中你会做任何你需要做的事情XElement- 如果你已经有了一种方法来创建你的类的实例XElement,你可以调用它,使用该对象,然后你就离开了.