在循环中使用时,XML 追加子项不会写入 xml 文件
本文关键字:文件 xml 追加 循环 XML | 更新日期: 2023-09-27 17:55:42
我正在编写一个应用程序,该应用程序从几个不同的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>
架构很好,由其他东西处理。任何帮助,不胜感激。谢谢。
首先要做的是在调试器下单步执行代码以查看它在做什么。很可能它没有找到任何要处理的数据。(例如,Numbers 不返回任何内容,curFile 不存在,或者 curFile 不包含任何数据行)。或者,程序甚至在尝试处理任何内容之前很久就抛出了异常。
使用调试器检查代码是否正在执行您假定的操作。
您还将对 XML 元素的引用追加到文档中。然后,您更改其 InnerText,并重新添加相同的引用,因此文档很可能会忽略您。
每次需要时,请尝试创建一个新的 XMLElement,而不是重用单个 XMLElement。 即在内部块中一起执行所有这些操作:
XmlElement dataElm = xdoc.CreateElement(@"rs:data");
dataElm.InnerText = contents;
xdoc.DocumentElement.AppendChild(dataElm);
我没有
看到任何明显的东西,但我的直接想法/怀疑是你没有在磁盘上找到你的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()