[英]Is this the most efficient way of loading xml values into a structure?
我正在嘗試將XML字符串中的數據加載到某種結構中,因此一旦加載,我就可以說Data.PropertyName來讀取值。
以下代碼是將數據加載到結構中的最佳方式嗎?
顯然調用First()有一個內存命中,所以如果你有子元素的元素將調用First()為每個成為一個問題?
謝謝
string xml = @"<ROOT>
<ID>1</ID>
<NAME>RF1</NAME>
<STAT>10200</STAT>
<TEST>
<ID>1</ID>
<NAME>BIGUN</NAME>
</TEST>
</ROOT>
";
XElement Data = XElement.Parse(xml);
var Element = (from p in Data.Descendants("ROOT")
select new {
ID = (int)p.Element("ID"),
Test = new {
ID = p.Element("TEST").Descendants("ID").First(),
NAME = p.Element("TEST").Descendants("NAME").First()
},
Stat = p.Element("STAT") }).First();
//Read Element.ID, Element.Test.Name
您可以使用XmlSerializer
進行反序列化嗎?
using System;
using System.IO;
using System.Xml.Serialization;
[XmlRoot("ROOT")]
public class MyType
{
[XmlElement("ID")]
public string Id { get; set; }
[XmlElement("NAME")]
public string Name { get; set; }
[XmlElement("STAT")]
public string Stat { get; set; }
[XmlElement("TEST")]
public MyOtherType Nested { get; set; }
}
public class MyOtherType
{
[XmlElement("ID")]
public string Id { get; set; }
[XmlElement("NAME")]
public string Name { get; set; }
}
static class Program
{
static void Main()
{
string xml = @"<ROOT>
<ID>1</ID>
<NAME>RF1</NAME>
<STAT>10200</STAT>
<TEST>
<ID>1</ID>
<NAME>BIGUN</NAME>
</TEST>
</ROOT>";
MyType obj = (MyType) new XmlSerializer(typeof(MyType))
.Deserialize(new StringReader(xml));
Console.WriteLine(obj.Id);
Console.WriteLine(obj.Name);
Console.WriteLine(obj.Stat);
Console.WriteLine(obj.Nested.Id);
Console.WriteLine(obj.Nested.Name);
}
}
我會去反序列化和Xml屬性:更具可讀性。
不,這不是最優化的方式,但它可能足夠好。
性能最優化的是編寫專門用於此的XML解析器,但這當然會包含更多代碼。
我不知道為什么你關心First
一種方法。 它會讓第一個項目通過,然后停止閱讀,所以它不會導致任何問題。 當然,XML解析器仍然需要解析所有子節點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.