我尝试阅读特定的XML,将必要的信息保存到两个不同的类Order
和OrderDetail
中。但是,当我尝试阅读" BuyerID"通过以下代码从我的XML中,它使用InvalidOperationException
:http://pastebin.com/Lu4mKtwq
ReadElementContentAsString method is not supported on node type None. Line 1, Position 634
在这一特定行:
order.CustomerID = reader.ReadElementContentAsString();
我的源代码:http://pastebin.com/JyTz8x0G
这是我正在使用的XML:
<Orders>
<Order ID="O2">
<OrderDate>1/7/2016</OrderDate>
<BuyerID>WSC1810</BuyerID>
<OrderItem>
<Item ID="R1">
<ItemName>8GB RAM King</ItemName>
<Decscription>8GB RAM King</Decscription>
<Capacity>8GB</Capacity>
<Quantities>150</Quantities>
<existingUnitPrice>100.00</existingUnitPrice>
</Item>
<Item ID="R2">
<ItemName>4GB RAM King</ItemName>
<Decscription>4GB RAM King Brand</Decscription>
<Capacity>4GB</Capacity>
<Quantities>100</Quantities>
<existingUnitPrice>50.00</existingUnitPrice>
</Item>
</OrderItem>
<RemarksandSpecialInstruction>Fragile, handle with care</RemarksandSpecialInstruction>
</Order>
</Orders>
答案 0 :(得分:2)
读取当前节点后的ReadElementContentAsString
方法移动到下一个节点。
所以在你的情况下有下面的代码
reader.ReadToFollowing("OrderDate");
order.OrderDate = reader.ReadElementContentAsString();
现在代码已经在OrderID,所以不要再尝试读取它。 而是执行类似下面的代码:
while (reader.ReadToFollowing("Order"))
{
order.OrderID = reader.GetAttribute("ID");
string orderID = reader.Value;
reader.ReadToFollowing("OrderDate");
if(reader.Name.Equals("OrderDate"))
order.OrderDate = reader.ReadElementContentAsString();
if (reader.Name.Equals("BuyerID"))
order.CustomerID = reader.ReadElementContentAsString();
orderList.Add(order);
while (reader.ReadToFollowing("Item"))
{
OrderDetail i = new OrderDetail();
i.OrderID = orderID;
i.ItemID = reader.GetAttribute("ID");
reader.ReadToFollowing("Decscription");
if (reader.Name.Equals("Decscription"))
i.Description = reader.ReadElementContentAsString();
if (reader.Name.Equals("Capacity"))
i.Capacity = reader.ReadElementContentAsString();
if (reader.Name.Equals("Quantities"))
i.Quantity = reader.ReadElementContentAsInt();
if (reader.Name.Equals("existingUnitPrice"))
i.AskingPrice = reader.ReadElementContentAsDecimal();
orderDetailList.Add(i);
}
}
还要确保您的xml和您的模型匹配。
答案 1 :(得分:0)
客户ID实际上是正确读取的,它是下面的行引发异常。 您的错误出现在以下代码行中:
reader.ReadToFollowing("Instructions");
原因是xml不包含元素Instructions
。
您可以通过不丢弃ReadToFollowing
if (reader.ReadToFollowing("Instructions"))
reader.ReadElementContentAsString();