如何将一个XML文件拆分成多个XML文件

8

我想在C#.net中将一个XML文件拆分成多个小的XML文件,并尝试找到最佳方法。希望能得到任何关于此事的帮助...以下是一个示例,说明我正在尝试做什么...

源XML文档

<?xml version="1.0" standalone="yes"?>
<DATABASE>
  <DOC>
    <DOCID>8510188</DOCID>
    <ISSUE>2010</ISSUE>
    <CAT>Literature and Art</CAT>
    <TITLE>Test</TITLE>
    <TEXT>Test</TEXT>
  </DOC>
  <DOC>
    <DOCID>1510179</DOCID>
    <ISSUE>2012</ISSUE>
    <CAT>Miscellaneous</CAT>
    <TITLE>Test</TITLE>
    <TEXT>Test</TEXT>
  </DOC>
</DATABASE>

应该按照以下方式拆分成两个xml文档

1)

<?xml version="1.0" standalone="yes"?>
<DATABASE>
  <DOC>
   <DOCID>8510188</DOCID>
   <ISSUE>2010</ISSUE>
   <CAT>Literature and Art</CAT>
   <TITLE>Test</TITLE>
   <TEXT>Test</TEXT>
  </DOC>
</DATABASE>

2)

<?xml version="1.0" standalone="yes"?>
<DATABASE>
  <DOC>
    <DOCID>1510179</DOCID>
    <ISSUE>2012</ISSUE>
    <CAT>Miscellaneous</CAT>
    <TITLE>Test</TITLE>
    <TEXT>Test</TEXT>
  </DOC>
</DATABASE>
1个回答

8

嗯,我会使用LINQ to XML:

XDocument doc = XDocument.Load("test.xml");
var newDocs = doc.Descendants("DOC")
                 .Select(d => new XDocument(new XElement("DATABASE", d)));
foreach (var newDoc in newDocs)
{
    newDoc.Save(/* work out filename here */);
}

(我假设您想保存它们。也许您不需要。我只是将它们打印到控制台上进行了测试。)

但是它却出现了错误:“System.Collections.Generic.IEnumerable<System.Xml.Linq.XElement>”没有“Select”的定义,也没有扩展方法“Select”接受第一个参数类型为“System.Collections.Generic.IEnumerable<System.Xml.Linq.XElement>”的方法被找到(您是否缺少使用指令或程序集引用?)。谢谢。 - AML
1
你在文件顶部的using列表中添加了System.Linq吗? - Karl-Johan Sjögren
2
@AML:在使用部分包含命名空间 System.LinqSystem.XML.Linq - Nikhil Agrawal
错误再次发生 'System.Collections.Generic.IEnumerable<System.Xml.Linq.XDocument>' 不包含 'Save' 的定义,也没有接受类型为 'System.Collections.Generic.IEnumerable<System.Xml.Linq.XDocument>' 的第一个参数的扩展方法 'Save' 可用(您是否缺少使用指令或程序集引用?) - AML
1
@AML:抱歉,应该是 newDoc.Save - Jon Skeet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接