【发布时间】:2016-10-02 18:41:20
【问题描述】:
第一次海报,长期阅读。 我有一个 XML 导入要编写(另一个第一个),我迷失在可以采用的相互冲突的方法和方法中。
我尝试导入的 XML 大致如下:
...
<TableRow>
<Field Name="DeliveryNote" Type="etc..">Text</Field>
<Field Name="OrderNumber" Type="etc..">Text</Field>
and so on...
</TableRow>
...
我有一个具有大多数字段属性的对象(不是所有必需的),我目前正在一个构造函数中填充属性,该构造函数被抛出相关的 XElement 来构建,如下所示:
public Order(XElement p_tableRow)
{
foreach (XElement field in p_TableRow.Elements("Field"))
{
switch (field.Attribute("Name").Value)
{
case "DeliveryNote":
ReasonCode = field.Value;
break;
case "OrderNumber":
OrderID = field.Value;
break;
case "ProductCode":
CustProductCode = field.Value;
break;
case "Quantity":
QuantityCharged = field.Value;
break;
...
我的问题是,虽然这可以完成工作,但它看起来非常笨重(而且丑陋)。肯定有更好的方法吗?
我尝试了解如何使用投影来执行此操作,但没有找到一个示例,您可以根据节点中的属性来决定数据的目的地。
我正在使用 .NET 3.5
任何指针将不胜感激。
【问题讨论】:
-
您是否尝试过使用 Xml 序列化? stackoverflow.com/questions/16831317/…
-
我喜欢你的代码。它易于理解和修改。您正在创建数据透视表,数据透视表代码可能很复杂。我会让代码尽可能简单,不要寻找任何捷径。
-
@Sam.C:我不确定序列化是否是正确的方法,因为从技术上讲(据我了解)我必须创建一个字段类来反序列化into,只是为了得到一个键/值对。
-
@jdweng:很高兴你喜欢它,但我有点担心与我在其他地方看到的一些伏都教相比,性能会很糟糕,但不明白。 :)
-
如果 xml 很小,我不会担心性能。性能只是大型 xml 的问题,然后您应该使用 XmlReader。
标签: c# xml xml-parsing linq-to-xml xml-attribute