如何在c#中使用Linq to xml在xml文件中单独获取所有值

时间:2017-10-25 04:20:42

标签: c# xml excel linq-to-xml

例如,我有一个像这样的嵌套xml

<Root>
  <NodeA>
    <NodeA1>
      <NodeA11>
        <SameNameNode>
          <SameNameNodeChild1>Value 1</SameNameNodeChild1>
          <SameNameNodeChild2>Value 2</SameNameNodeChild2>
        </SameNameNode>
      </NodeA11>
    </NodeA1>
  </NodeA>
  <NodeB>
    <SameNameNode>
      <SameNameNodeChild1>Value 3</SameNameNodeChild1>
      <SameNameNodeChild2>Value 4</SameNameNodeChild2>
    </SameNameNode>
  </NodeB>
  <NodeC>
    <NodeC1>
      <SameNameNode>
        <SameNameNodeChild1>Value 5</SameNameNodeChild1>
        <SameNameNodeChild2>Value 6</SameNameNodeChild2>
      </SameNameNode>
    </NodeC1>
  </NodeC>

如何检索所有值 值1一直到值6并将它们存储在excel表中?

目前我所拥有的代码是

  foreach (XElement DirectChild in xml.Descendants())
            {
                foreach (XElement child in DirectChild.Descendants())
                {

                    foreach (XElement GrandChild in DirectChild.Elements())
                    {

                    dataList.Add(GrandChild.Value);

                    }

            }

并将数据放入Excel工作表。

虽然我得到的数据格式是

在1个细胞中 {值1值2}

第二个单元格中的

{值1}

第三个单元格中的

{值2}

单元格4中的

{值3值4}

单元格5 {值3}

单元格6 {值4}

有没有办法动态获取每个值而不获取组中的值,我有大约100个xml文件要转换,我不认为我可以专门标记

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

编辑:过滤不具有子元素

的元素的示例
XElement root = XElement.Parse(@"<Root>
  <NodeA>value</NodeA>
  <NodeB>value</NodeB>
  <NodeC>
    <NodeD>value</NodeD>
  </NodeC>
  </Root>
  ");

foreach(var el in root.Descendants())
{
    if(!el.HasElements)
        Console.WriteLine(el.ToString());
}