我在C#中用XMLWriter编写了一系列设置。这是一些代码:
try
{
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.IndentChars = (" ");
using (writer = XmlWriter.Create("PCOB2NET.XML", settings))
{
// Write XML data.
writer.WriteStartElement("PowerCOBOL2NETMigration");
writer.WriteStartElement("config");
writer.WriteElementString("VSVersion", selectedVSver);
writer.WriteElementString("path2SelectedVSVerProjects", path2SelectedVSVerProjects);
if (path2VSoverridden)
writer.WriteElementString("path2VSoverridden", "true");
else
writer.WriteElementString("path2VSoverridden", "false");
writer.WriteElementString("path2PRCfile", path2PRCfile);
writer.WriteElementString("path2XMLfile", path2XMLfile);
writer.WriteElementString("path2VSProject", path2VSProject);
......等等。 我的问题是,如果有一个异常(比如一个空字段),它会进入catch块并按照我们的预期报告异常,但我不知道它当时写的WHICH字段。
我的问题:
当发生异常时,有什么办法可以让当前字符串被写入?我在网上搜索没有成功,我查看了XMLWriter的每个属性和方法,但我找不到办法。是否有某种类型的异常陷阱可以提供给我?任何帮助或想法的赞赏。
答案 0 :(得分:0)
尝试xml linq,这是一个用于读写xml
的新Net Libraryusing System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
string selectedVSver = "";
string path2SelectedVSVerProjects = "";
Boolean path2VSoverridden = true;
string path2PRCfile = "";
string path2XMLfile = "";
string path2VSProject = "";
XDocument doc = new XDocument();
XElement powerCOBOL2NETMigration = new XElement("PowerCOBOL2NETMigration", new object[] {
new XElement("config", new object[] {
new XElement("VSVersion", selectedVSver),
new XElement("path2SelectedVSVerProjects", path2SelectedVSVerProjects),
new XElement("path2VSoverridden", path2VSoverridden),
new XElement("path2PRCfile", path2PRCfile),
new XElement("path2XMLfile", path2XMLfile),
new XElement("path2VSProject", path2VSProject)
})
});
doc.Add(powerCOBOL2NETMigration);
doc.Save(FILENAME);
}
}
}
答案 1 :(得分:0)
最简单的方法是在XmlWriter.WriteStartElement等周围包装小帮助器方法,并在那里捕获异常。
答案 2 :(得分:0)
事实证明我正在寻找问题的错误解决方案。而不是困惑的XMLWriter,我应该做的是调查EXCEPTION。 (我确实这样做但只针对Exception类,我需要进一步查看。)问题看起来可以通过嵌套一些异常catch块来轻松解决,所以:
" ... WHERE (pGroupID= ProductGroupIDDropDownList.SelectedItem.Value)"
... }
SQL Injection
... }
catch (ArgumentNullException anEx)
{
// retrieve the offending field name from anEX...
badField = anEx.ParamName;
...
然而,我被“ParamName”误导了,这并不意味着我的想法...这总是返回null并且我没有好转。
在花了几个小时阅读C#中关于异常处理的所有内容之后,我更了解情况,但没有更明智。我无法找到框架的解决方案,所以我几乎没有办法,只是通过一个方法来推送所有设置,这个方法将执行实际的写入并捕获当时的任何异常,并且有可用的违规字段,因为它将被传递到那种方法。
我认为这不优雅,但我不能花更多的时间在上面。非常感谢所有回复的人以及那些想要回应的人...... :-)如果有人真的有解决方案的话,我会保持开放状态几天。