使用LINQ根据子元素值将一个XML文件解析为多个文件

时间:2017-04-05 22:35:24

标签: c# xml linq

我有一个XML文件,我想将其拆分为多个基于VIEWNAME的XML文件。

根据下面的示例,有三个VIEWNAME值,对于每个值,还有VIEWPANE元素和VIEWCOLUMN元素。

使用LINQ,我的代码到目前为止可以保存仅包含VIEWNAME节点的文件:

<?xml version="1.0" standalone="yes"?>
<VisualModelDS>
  <viewname>
    <viewname>A B C</viewname>
  </viewname>
  <viewpane>
    <viewname>A B C</viewname>
    <viewpane>ALPHA</viewpane>
  </viewpane>
  <viewcolumn>
    <viewname>A B C</viewname>
    <viewpane>ALPHA</viewpane>
    <viewcolumn>Apples</viewcolumn>
  </viewcolumn>
  <viewcolumn>
    <viewname>A B C</viewname>
    <viewpane>ALPHA</viewpane>
    <viewcolumn>Oranges</viewcolumn>
  </viewcolumn>

  <viewname>
    <viewname>X Y Z</viewname>
  </viewname>
  <viewpane>
    <viewname>X Y Z</viewname>
    <viewpane>CAPPA</viewpane>
  </viewpane>
  <viewcolumn>
    <viewname>X Y Z</viewname>
    <viewpane>CAPPA</viewpane>
    <viewcolumn>Macadema</viewcolumn>
  </viewcolumn>
  <viewcolumn>
    <viewname>X Y Z</viewname>
    <viewpane>CAPPA</viewpane>
    <viewcolumn>Pecan</viewcolumn>
  </viewcolumn>
  <viewpane>
    <viewname>X Y Z</viewname>
    <viewpane>OMEGA</viewpane>
  </viewpane>
  <viewcolumn>
    <viewname>X Y Z</viewname>
    <viewpane>OMEGA</viewpane>
    <viewcolumn>Peanut</viewcolumn>
  </viewcolumn>
</VisualModelDS>

我正在寻求帮助以包含具有相应VIEWNAME值的其他节点。我想我想要的是对具有相同子VIEWNAME元素的所有父/子元素进行分组,然后根据VIEWNAME元素值将每组元素保存到自己的XML文件中。

下面的XML将解析为2个文件,并且我已经嵌入了一个硬回车来区分哪些元素会进入哪个文件。

所有人都说,每个父元素都有一个子VIEWNAME元素,可以从中分组。

XML将嵌入空间编辑为元素值

dataType : "html"

1 个答案:

答案 0 :(得分:1)

var viewNames = xdoc.Root.Elements("viewname").Elements("viewname");

foreach (var viewName in viewNames)
{
    var group = new XElement(viewName.Value.Replace(" ", ""),
        xdoc.Root.Elements().Where(elem => elem.Element("viewname").Value == viewName.Value));

    group.Save(viewName.Value + ".txt");
}