根元素缺少XML

时间:2014-04-02 18:22:56

标签: c# asp.net xml xslt xsd

我正在获取此代码的根元素缺少异常。代码试图再次读取相同的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();

             }

2 个答案:

答案 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文件的。