1

我正在编写一个应用程序,它从几个不同的 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>

Schema 很好,正在由其他东西处理。对此的任何帮助表示赞赏。谢谢你。

4

2 回答 2

0

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

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

您还将对 XML 元素的引用附加到文档中。然后您更改其 InnerText,并重新添加相同的引用,因此文档很可能会忽略您。

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

XmlElement dataElm = xdoc.CreateElement(@"rs:data");
dataElm.InnerText = contents;
xdoc.DocumentElement.AppendChild(dataElm);
于 2013-01-24T20:15:48.453 回答
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()

于 2013-01-24T19:05:51.060 回答