如何使用c#检查xml文件是否为空

时间:2014-01-06 05:31:00

标签: c# xml

大家好我想检查我的xml文件是否为空。我试图将一个xml数据更新为另一个为此我使用以下代码。现在请告诉我如何检查我的xml文件是否有数据 这是我用于更新my xml文件的代码

protected void CheckUpdates()
{
    StringReader strReader = new StringReader("..\\xml\\Updatelist.xml");
    XmlReader reader = XmlReader.Create(strReader);
    try
    {
       while (reader.Read())
       {
           var originalXmlDoc = XDocument.Load("..\\xml\\list.xml"); var newXmlDoc = XDocument.Load("..\\xml\\Updatelist.xml");

           foreach (var newElement in newXmlDoc.Element("blocker").Elements("lst"))
           {
               newElement.Value.Trim();
               if (!originalXmlDoc.Element("blocker").Elements("lst")
                       .Any(oldElement => oldElement.Value.Trim().Equals(
                       newElement.Value.Trim(),
                       StringComparison.InvariantCultureIgnoreCase)))
                {
                   originalXmlDoc.Element("blocker").Add(new XElement("lst", newElement.Value));
                }
             }
             originalXmlDoc.Save("..\\xml\\list.xml", SaveOptions.None);

             XmlDocument doc = new XmlDocument();
             doc.Load("..\\xml\\Updatelist.xml");
             doc.DocumentElement.RemoveAll();
             doc.Save("..\\xml\\Updatelist.xml");
          }
       }
    catch (XmlException ex)
    {
       //Catch xml exception
       //in your case: root element is missing
    }
}

我收到此错误

  

根级别的数据无效。第1行,第1位。

请告诉我如何检查Updatelist.xml是否为空?

现在我收到此错误

2 个答案:

答案 0 :(得分:9)

有两种方法可以做到。

第一个是读取文件并检查其结构,以查看其中是否有任何子项。请注意,属性ChildNodes仅返回XML DOM的特定级别上的子级。

XmlDocument xDoc = new XmlDocument();
if (xDoc.ChildNodes.Count == 0) { 
    // It is empty 
}else if (xDoc.ChildNodes.Count == 1) { 
    // There is only one child, probably the declaration node at the beginning
}else if (xDoc.ChildNodes.Count > 1) { 
    // There are more children on the **root level** of the DOM
}

第二种方法是捕获文档加载时抛出的相应XMLException

try
{
    XmlDocument doc = new XmlDocument();
    doc.Load("test.xml");
}
catch (XmlException exc)
{
    //invalid file
}

希望我帮忙!

答案 1 :(得分:1)

您可以尝试将XML加载到XML文档中并捕获异常。 以下是示例代码:

var doc = new XmlDocument();
try {
  doc.LoadXml(content);
} catch (XmlException e) {
  // put code here that should be executed when the XML is not valid.
}

希望它有所帮助。

<强>(OR)

如果你想要这个功能(出于风格方面的原因,而不是性能原因),请自己实现:

public class MyXmlDocument: XmlDocument
{
  bool TryParseXml(string xml){
    try{
      ParseXml(xml);
      return true;
    }catch(XmlException e){
      return false;
    }
 }

使用此功能知道它是否有效

Source