XML AppendChild在循环中使用时不写入xml文件

时间:2013-01-24 18:58:12

标签: c# xml

我正在编写一个应用程序,它从几个不同的XML文件中获取数据并将它们移动到一个文件中。但是,当我尝试这样做时,它什么也没写。我的代码如下:

XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(xsh);
XmlElement dataElm = xdoc.CreateElement(@"rs:data");
string contents = "";
foreach (var i in Numbers.GetWSnumber())
{
    string curFile = @"\\wwproduction02\public2\Software\PMStatus\Status\WS" + i.WeaverSetId + ".xml";
    if (File.Exists(curFile))
    {
        System.IO.StreamReader file = new System.IO.StreamReader(curFile);
        while ((contents = file.ReadLine()) != null)
        {
            dataElm.InnerText = contents;
            xdoc.DocumentElement.AppendChild(dataElm);
        }
    }
}
xdoc.Save("doc.xml");

我想要实现的XML的格式是

<xml> 
<Schema> 
schema data in here 
</Schema> 
<rs:data> 
XML from other files here 
</rs:data> 
</xml>

架构很好,并且由其他东西处理。 任何帮助都表示赞赏。谢谢。

2 个答案:

答案 0 :(得分:0)

我没有看到任何明显的东西,但我的直接想法/怀疑是你没有在磁盘上找到你的XML文件。尝试添加一个else子句并注销(通过log4net或其他方法)一个未找到当前文件的语句,如下所示:

if (File.Exists(curFile))
{
    System.IO.StreamReader file = new System.IO.StreamReader(curFile);
    while ((contents = file.ReadLine()) != null)
    {
        dataElm.InnerText = contents;
        xdoc.DocumentElement.AppendChild(dataElm);
    }
}
else 
{
    // log statement that file curFile was not found
}

<强>更新

您没有关闭System.IO.StreamReader。虽然我不相信这会导致您的问题,但您绝对不希望I / O读者不知所措。

您需要致电System.IO.StreamReader.Close()

答案 1 :(得分:0)

首先要做的是在调试器下单步执行代码,看看它在做什么。可能是它没有找到任何要处理的数据。 (例如,Numbers不返回任何内容,curFile不存在,或者curFile不包含任何数据行)。或者,程序在尝试处理任何事情之前很久就会抛出异常。

使用调试器检查您的代码是否按照您的预期执行。

您还要将引用附加到文档的XML元素中。 然后你改变它的InnerText,并重新添加相同的引用,所以文档可能会忽略你。

每次需要时都尝试创建新的XMLElement,而不是重复使用单个XMLElement。即在内部块中一起完成所有这些:

XmlElement dataElm = xdoc.CreateElement(@"rs:data");
dataElm.InnerText = contents;
xdoc.DocumentElement.AppendChild(dataElm);