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 回答