我有這個 xml:
<NewDataSet xmlns="http://anonymous_link_here">
<Table>
<Name>Example</Name>
</Table>
<Table>
<Name>Example</Name>
</Table>
<Table>
<Name>Example</Name>
</Table>
<Table>
<Name>Example</Name>
</Table>
</NewDataSet>
我正在嘗試將此 xml 決議為List<myClass>:
public static List<myClass> ConvertToList(string xml)
{
var objects= XDocument.Parse(xml);
var objectsList= (from o in objects.Root.Elements()
select new myClass()
{
Name = (string)o.Element("Name"),
}).ToList();
return objectsList;
}
我的班級:
[Serializable]
[XmlRoot("Table"), Namespace="http://anonymous_link_here"]
public class myClass{
[XmlElement(ElementName="Name"), Namespace="http://anonymous_link_here"]
public string Name { get; set; }
}
我不知道為什么我在 中得到正確的元素計數objectsList,但Name屬性為空。我認為有問題:
Name = (string)o.Element("Name")。任何幫助,將不勝感激。
uj5u.com熱心網友回復:
問題是您對 的呼叫o.Element("Name")查找一個Name 沒有名稱空間的元素,而您的元素位于檔案的默認名稱空間中,即"http://anonymous_link_here".
幸運的是,使用 LINQ to XML 可以很容易地解決這個問題XNamespace:
XNamespace ns = "http://anonymous_link_here";
XElement child = parent.Element(ns "Name");
稍微重寫(并重命名為 avoid myClass),這就是您的方法的外觀:
public static List<Table> ConvertToList(string xml)
{
var document = XDocument.Parse(xml);
XNamespace ns = "http://anonymous_link_here";
return document.Root
.Elements()
.Select(element => new Table { Name = (string) element.Element(ns "Name") })
.ToList();
}
或者在運算式主體方法中:
private static readonly XNamespace TableNamespace = "http://anonymous_link_here";
public static List<Table> ConvertToList(string xml) =>
XDocument.Parse(xml)
.Root
.Elements()
.Select(element => new Table
{
Name = (string) element.Element(TableNamespace "Name")
})
.ToList();
uj5u.com熱心網友回復:
您也可以嘗試下面的代碼;注意 Name = o。值不是 .Element,
public static List<myClass> ConvertToList(string xml)
{
var objects = XDocument.Parse(xml);
var objectsList = (from o in objects.Root.Elements()
select new myClass()
{
Name = o.Value,
}).ToList();
return objectsList;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/534582.html
標籤:C#。网XML林克
上一篇:VBA展望-讀取XML檔案
