我正在获取此代码的根元素缺少异常。代码试图再次读取相同的xml文件。此位置有大约150个xml文件。有人可以帮忙吗?
foreach (string file in Directory.EnumerateFiles("C:\\Path\\", "*.xml"))
{
string FileName = Path.GetFileNameWithoutExtension(file);
XPathDocument myXPathDoc = new XPathDocument(file);
XslCompiledTransform myXslTrans = new XslCompiledTransform();
/* loading XSLT */
myXslTrans.Load("ABCXSLT.xsl");
/* creating Output Stream */
XmlTextWriter myWriter = new XmlTextWriter(FileName + "_cleaned.xml", null);
/* XML transformation */
myXslTrans.Transform(myXPathDoc, null, myWriter);
myWriter.Close();
}
答案 0 :(得分:1)
我怀疑你会得到同样的错误,但你可以更好地隔离并确定它是否是由xslt或xml文件引起的。
将xslt的加载移到循环外部:
XslCompiledTransform myXslTrans = new XslCompiledTransform();
/* loading XSLT */
myXslTrans.Load("ABCXSLT.xsl");
然后执行你的循环:
foreach (string file in Directory.EnumerateFiles(@"C:\Path\", "*.xml")) {
string FileName = Path.GetFileNameWithoutExtension(file);
XPathDocument myXPathDoc = new XPathDocument(file);
/* creating Output Stream */
XmlTextWriter myWriter = new XmlTextWriter(FileName + "_cleaned.xml", null);
/* XML transformation */
myXslTrans.Transform(myXPathDoc, null, myWriter);
myWriter.Close();
}
答案 1 :(得分:0)
为什么不试试这个,找到所有缺少根元素的文件:
foreach (string file in Directory.EnumerateFiles(path, "*.xml"))
{
try { XElement.Load(file); }
catch
{
string name = Path.GetFileName(file);
Console.WriteLine(name + " is missing a root element");
}
}
如果它没有捕获,那么你的代码是错误处理xml文件的。