1

XMLに従っています。要素ノードとテキストが含まれています。ノードごとに次のクラスのオブジェクトを作成する必要がありelementます(のみ)。要素の名前とその値をオブジェクトに格納する必要があります。どうやってやるの?

    public class MyElement
    {
        public string ElementName { get; set; }
        public string ElementValue { get; set; }
    }

コード

   static void Main(string[] args)
   {

        XDocument pDoc = XDocument.Parse(@"<main>
                                             Direct 1
                                            <sub1>A</sub1>
                                             Direct 2
                                            <sub2>B</sub2>
                                            <sub3>C</sub3>
                                             00
                                         </main>");



        IEnumerable<XNode> nodes = from c in pDoc.Elements().Nodes()
                                      select c;

        IEnumerable<MyElement> entityCollection = nodes.Select(v => new MyElement()
                             {
                                ElementName = v.ToString()
                             }).ToList();


    }

必要な結果は次のようになります

List<MyElement> sampleRequiredList = new List<MyElement>();
sampleRequiredList.Add(new MyElement() { ElementName = "sub1", ElementValue = "A" });
sampleRequiredList.Add(new MyElement() { ElementName = "sub2", ElementValue = "B" });
sampleRequiredList.Add(new MyElement() { ElementName = "sub3", ElementValue = "C" });

アップデート

以下は、選択した回答に基づく解決策です。

        var elementsUsingRoot = pDoc.Root.Elements();
        var nodesUsingRoot = pDoc.Root.Nodes();

        var secondCollection = pDoc.Root.Elements()
                      .Select(x => new MyElement
                      {
                          ElementName = x.Name.LocalName,
                          ElementValue = x.Value
                      });


        //Text Nodes
        IEnumerable<XText> textNodes = from c in pDoc.Root.Nodes()
                                       where c.NodeType == XmlNodeType.Text
                                       select (XText)c;

        //Element Nodes
        IEnumerable<XElement> elementNodes = from c in pDoc.Root.Nodes()
                                             where c.NodeType == XmlNodeType.Element
                                             select (XElement)c;


        //Element Nodes 2
        IEnumerable<XElement> elementNodes2 = from c in pDoc.Root.Elements()
                                              select c;

参照

  1. すべての子ノードの値ではなく、XElement の値を取得する方法は?
  2. LINQ を使用して xml からエンティティ オブジェクトを作成する最良の方法
4

1 に答える 1

3

次のようなものが必要なようです。

var entityCollection = doc.Root
                          .Elements()
                          .Select(x => new MyElement {
                                           ElementName = x.Name.LocalName,
                                           ElementValue = x.Value
                                       });
于 2013-03-13T10:19:05.883 に答える