我需要一个XML文件,并从输入文件的重复的节点创建多个输出的XML文件。 源文件“AnimalBatch.xml”看起来是这样的:
<?xml version="1.0" encoding="utf-8" ?>
<Animals>
<Animal id="1001">
<Quantity>One</Quantity>
<Adjective>Red</Adjective>
<Name>Rooster</Name>
</Animal>
<Animal id="1002">
<Quantity>Two</Quantity>
<Adjective>Stubborn</Adjective>
<Name>Donkeys</Name>
</Animal>
<Animal id="1003">
<Quantity>Three</Quantity>
<Color>Blind</Color>
<Name>Mice</Name>
</Animal>
</Animals>
该程序需要拆分的重复“动物”,并产生3个文件名为:Animal_1001.xml,Animal_1002.xml和Animal_1003.xml
每个输出文件应该只包含其各自的元件(这将是根目录)。 从AnimalsBatch.xml id属性将提供的序列号为文件名Animal_xxxx.xml。 id属性并不需要在输出文件。
Animal_1001.xml:
<?xml version="1.0" encoding="utf-8"?>
<Animal>
<Quantity>One</Quantity>
<Adjective>Red</Adjective>
<Name>Rooster</Name>
</Animal>
Animal_1002.xml
<?xml version="1.0" encoding="utf-8"?>
<Animal>
<Quantity>Two</Quantity>
<Adjective>Stubborn</Adjective>
<Name>Donkeys</Name>
</Animal>
Animal_1003.xml>
<?xml version="1.0" encoding="utf-8"?>
<Animal>
<Quantity>Three</Quantity>
<Adjective>Blind</Adjective>
<Name>Mice</Name>
</Animal>
我想与XmlDocument的做到这一点,因为它需要能够在NET 2.0运行。
我的计划是这样的:
static void Main(string[] args)
{
string strFileName;
string strSeq;
XmlDocument doc = new XmlDocument();
doc.Load("D:\\Rick\\Computer\\XML\\AnimalBatch.xml");
XmlNodeList nl = doc.DocumentElement.SelectNodes("Animal");
foreach (XmlNode n in nl)
{
strSeq = n.Attributes["id"].Value;
XmlDocument outdoc = new XmlDocument();
XmlNode rootnode = outdoc.CreateNode("element", "Animal", "");
outdoc.AppendChild(rootnode); // Put the wrapper element into outdoc
outdoc.ImportNode(n, true); // place the node n into outdoc
outdoc.AppendChild(n); // This statement errors:
// "The node to be inserted is from a different document context."
strFileName = "Animal_" + strSeq + ".xml";
outdoc.Save(Console.Out);
Console.WriteLine();
}
Console.WriteLine("END OF PROGRAM: Press <ENTER>");
Console.ReadLine();
}
我想,我有2个问题。
A)做ImportNode上节点n到outdoc后,我请outdoc.AppendChild(N),其抱怨:“要插入的节点是从一个不同的文件中,” 我不知道这是一个范围问题引用节点n foreach循环中 - 或者,如果我有点不使用ImportNode()或使用appendChild正常。 在ImportNode第二个参数()设置为true,因为我想要动物的子元素(3场任意命名数量,形容词和名称)在目标文件结束。
B)第二个问题是获得动物元件成outdoc。 我得到“”,但我需要'这样我就可以把节点n里面。 我想我的问题是我过得怎么样:outdoc.AppendChild(根节点);
要显示XML,我做:outdoc.Save(Console.Out); 我有代码保存()到一个输出文件 - 这不工作,只要我能得到outdoc组装正常。
有一处类似的问题: 在多个XML文件拆分XML ,但我不明白的解决方案代码呢。 我觉得我非常接近这一做法,并感谢所有帮助您可以提供。
我将做使用的XmlReader完成相同的任务,因为我将需要能够处理大量输入文件,据我所知,在XmlDocument的读取整个事情,可能会导致内存问题。