我是C#的新手.我正在构建一个应用程序,该应用程序使用元素列表来保存XML文件.我的XML文件的结构如下:
<Elements>
<Element>
<Name>Value</Name>
<Type>Value</Type>
<Color>Value</Color>
</Element>
<Element>
<Name>Value</Name>
<Type>Value</Type>
<Color>Value</Color>
</Element>
<Element>
<Name>Value</Name>
<Type>Value</Type>
<Color>Value</Color>
</Element>
</Elements>
Run Code Online (Sandbox Code Playgroud)
我有<100个这样的项目,这是一个单一的列表(所以我认为数据库解决方案有点矫枉过正,甚至是SQLite).当我的应用程序加载时,我想将这个元素列表读取到内存中.目前,在浏览网页后,我正在使用XmlTextReader.
然而,也许我正在以错误的方式使用它,我逐个标记地读取数据,因此期望标签处于特定顺序(否则代码将变得混乱).我想要做的是阅读完整的"元素"结构并按名称从中提取标签.我确信这是可能的,但是怎么样?
为了澄清,主要区别在于我今天使用XmlTextReader的方式,它不能容忍诸如标签错误顺序之类的场景(例如Type在某个Element中的Name之前).
在C#中将此类结构加载到内存中的最佳实践是什么?
Jon*_*eet 10
这真的很容易在LINQ做XML.你在使用.NET 3.5吗?这是一个示例:
using System;
using System.Xml.Linq;
using System.Linq;
class Test
{
[STAThread]
static void Main()
{
XDocument document = XDocument.Load("test.xml");
var items = document.Root
.Elements("Element")
.Select(element => new {
Name = (string)element.Element("Name"),
Type = (string)element.Element("Type"),
Color = (string)element.Element("Color")})
.ToList();
foreach (var x in items)
{
Console.WriteLine(x);
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可能想要创建自己的数据结构来保存每个元素,但您只需要更改"选择"调用即可使用它.
您没有使用XmlDocument的任何特殊原因?
XmlDocument myDoc = new XmlDocument()
myDoc.Load(fileName);
foreach(XmlElement elem in myDoc.SelectNodes("Elements/Element"))
{
XmlNode nodeName = elem.SelectSingleNode("Name/text()");
XmlNode nodeType = elem.SelectSingleNode("Type/text()");
XmlNode nodeColor = elem.SelectSingleNode("Color/text()");
string name = nodeName!=null ? nodeName.Value : String.Empty;
string type = nodeType!=null ? nodeType.Value : String.Empty;
string color = nodeColor!=null ? nodeColor.Value : String.Empty;
// Here you use the values for something...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
606 次 |
| 最近记录: |