2

私は次のxmlを持っています

<?xml version="1.0" encoding="UTF-8"?>
<Actions>
    <add order-id="1" symbol="ABC" price="5" quantity="200" />
    <add order-id="2" symbol="123" price="15" quantity="100" />
    <add order-id="3" symbol="ABC" price="5" quantity="300" />
    <add order-id="4" symbol="ABC" price="7" quantity="150" />
    <edit order-id="1" price="7" quantity="200" />
    <remove order-id="4" />
    <add order-id="5" symbol="123" price="17" quantity="300" />
    <add order-id="6" symbol="123" price="12" quantity="150" />
    <edit order-id="3" price="7" quantity="200" />
    <remove order-id="5" />
</Actions>

linq を使用してこれを次のオブジェクト構造に解析する必要があります。

 internal class OrderAction
    {
        private readonly Action action;
        private readonly Order order;
        public Action Action { get { return action; }}
        public Order Order { get { return order; }}

        public OrderAction(Action action,Order order)
        {
            this.action = action;
            this.order = order;
        }
    }

アクションがある場所 public enum Action { ADD, REMOVE, EDIT }

順序は次のとおりです。

class Order
    {
        public Order(long orderId, String symbol, int price, int quantity)
        {
            this.orderId = orderId;
            this.symbol = symbol;
            this.price = price;
            this.quantity = quantity;
        }

        public long orderId { get; private set; }
        public String symbol { get; private set; }
        public int price { get; private set; }
        public int quantity { get; private set; }
}

xml を xdocument にロードし、ファイル内の orderactions のすべての IEnumerable を見つける必要があります。シリアライゼーション属性に頼らずに、どうすればこれを行うことができますか?

4

2 に答える 2

0

これが私のベストショットです

     XElement doc = XElement.Load("d:\\tst.xml");

     List<OrderAction> lst = doc.Elements().Select(x =>
       new OrderAction(
          (Action)
          Enum.Parse(typeof (Action),
                     x.Name.ToString().ToUpper()),
          new Order(
             long.Parse(x.Attribute("order-id").Value),
             x.Attribute("symbol") != null ? x.Attribute("symbol").Value : "",
             x.Attribute("price") != null ? int.Parse(x.Attribute("price").Value) : 0,
             x.Attribute("quantity") != null ? int.Parse(x.Attribute("quantity").Value): 0))
        ).ToList();

しばらく時間がかかりました...私はそれほど大きなlinq解析に慣れていません

于 2013-09-12T15:38:32.997 に答える
0

Order「編集と削除」の場合、欠落しているプロパティの値はどうあるべきですか?私は、stringとのデフォルト値を仮定しましたint...

XDocumentこれは LINQ ステートメントになります ( yourが と呼ばれると仮定しますdoc):

var result = doc
    .Root
    .Elements()
    .Select(elem => new OrderAction
            (
                (Action)Enum.Parse(typeof(Action), elem.Name.LocalName.ToUpper()),
                new Order
                (
                    elem.Attributes("order-id").Select(x => long.Parse(x.Value)).FirstOrDefault(),
                    elem.Attributes("symbol").Select(x => x.Value).FirstOrDefault(),
                    elem.Attributes("price").Select(x => int.Parse(x.Value)).FirstOrDefault(),
                    elem.Attributes("quantity").Select(x => int.Parse(x.Value)).FirstOrDefault()
                )
            ));
于 2013-09-12T15:28:22.347 に答える