我正在读取一个xml文件并通过以下方式查询LINQ
IndexOf(":")
但是收到错误“XElement”类型(索引0处)中没有属性或字段“OrderID”
这是我的样本xml,我正在查询LINQ
XDocument document = XDocument.Load(xmlFilePath);
var query = document.Descendants("orders").Select(c => c);
query = query.OrderBy(sortColumn + " " + OrderDirection);
query = query.Skip(lowerPageBoundary - 1 * rowsPerPage).Take(rowsPerPage);
DataTable table = query.ToList().ConvertToDataTable();
table.Locale = System.Globalization.CultureInfo.InvariantCulture;
//adapter.Fill(table);
return table;
我使用下面的查询,但仍然没有运气
<?xml version="1.0" encoding="utf-8"?>
<Root>
<Orders>
<OrderID>10248</OrderID>
<CustomerID>VINET</CustomerID>
<EmployeeID>5</EmployeeID>
<OrderDate>1996-07-04T00:00:00</OrderDate>
<RequiredDate>1996-08-01T00:00:00</RequiredDate>
<ShippedDate>1996-07-16T00:00:00</ShippedDate>
<ShipVia>3</ShipVia>
<Freight>32.3800</Freight>
<ShipName>Vins et alcools Chevalier</ShipName>
<ShipAddress>59 rue de l'Abbaye</ShipAddress>
<ShipCity>Reims</ShipCity>
<ShipPostalCode>51100</ShipPostalCode>
<ShipCountry>France</ShipCountry>
</Orders>
</Root>
答案 0 :(得分:2)
您收到错误的原因是XML tags are case sensitive。
链接的摘录(经过修改以匹配您问题中的示例):
XML标记区分大小写。标签&lt;订单&gt;与标记&lt; orders&gt;不同。
您的查询正在搜索不存在的元素&#34; orders&#34;。更新您的查询:
XDocument document = XDocument.Load(xmlFilePath);
var query = document.Descendants("Orders").Select(c => c);
更新:
根据您的评论,错误实际上是根据&#34; OrderID&#34;在IEnumerabe<XElement>
内。 &#34; OrderID&#34;实际上是每个XElement
的子元素。
对此进行更多研究可能会有所帮助。在谷歌搜索的帮助下,我的结果显示System.Linq.Dynamic库不是为与XML一起使用而设计的。
请参阅OP总结的SO Question:
我终于开始工作了。我放弃了原来的方法,因为到目前为止我并不相信它甚至打算用于Xml。我发现在任何地方都没有发表任何反对该声明的论据。
如何将XML读入DataSet?
DataSet dataSet = new DataSet();
dataSet.ReadXml(xmlFilePath);
string sort = sortColumn + " " + OrderDirection;
DataTable table = dataSet.Tables["Orders"].Select("", sort)
.Skip(lowerPageBoundary - 1 * rowsPerPage)
.Take(rowsPerPage)
.CopyToDataTable();
table.Locale = System.Globalization.CultureInfo.InvariantCulture;