【发布时间】:2011-01-28 18:43:18
【问题描述】:
无论如何,通过使用 LINQ、XmlDocument 等,我可以将一个大的 xml 文件拆分成更小的卡盘并保留所有父节点值
示例 XML
<Inventory>
<Dealer>
<ID>123</ID>
<Phone>1235551234</Phone>
<Units>
<Unit>
<Year>
<Make />
<Model />
</Unit>
<Unit>
<Year />
<Make />
<Model />
</Unit>
</Units>
</Dealer>
<Dealer>
<ID>124</ID>
<Phone>1235554321</Phone>
<Units>
<Unit>
<Year />
<Make />
<Model />
</Unit>
<Unit>
<Year />
<Make />
<Model />
</Unit>
</Units>
</Dealer>
</Inventory>
对于原始中找到的每个 Unit 节点,块应该如下所示
<Inventory>
<Dealer>
<ID>123</ID>
<Phone>1235551234</Phone>
<Units>
<Unit>
<Year>
<Make />
<Model />
</Unit>
</Units>
</Dealer>
</Inventory>
我应该澄清一个问题,我正在尝试以编程方式构建从“单元”节点开始的块。不知道父元素中可能包含的内容。
到目前为止我的解决方案是
XDocument document = XDocument.Load("sample.xml");
var units = document.Descendents("Unit").ToList();
foreach (XElement unit in units)
{
XElement parent = unit;
XElement child = parent;
while (null != parent.Parent)
{
parent = parent.Parent;
parent.Descendents(child.Name).Remove();
parent.Add(child);
child = parent;
}
}
这适用于每个经销商节点中的第一个单元,该经销商的每个后续单元都会丢失任何父信息,并且块仅包含单元节点。
【问题讨论】:
-
乍得,标签中有“(C#)”的时候,不需要在标题中加上。
-
如果您真正需要的是解析一个大的 xml 文件而不将整个文件读入内存,请参阅 XmlReader msdn.microsoft.com/en-us/library/system.xml.xmlreader.aspx
-
在下面查看我提出的解决方案
标签: c# xml linq-to-xml xmldocument