如何使用C#检查XML文件是否为空

5

大家好,我想检查一下我的 XML 文件是否为空。我正在尝试将一个 XML 数据更新到另一个数据中,为此我使用了以下代码。现在,请告诉我如何检查我的 XML 文件是否有数据。

这是我用来更新 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 是否为空?

现在我遇到了这个错误


1
请参考这里 - pravprab
2个回答

11

有两种方法可以做到。

第一种是读取文件,并检查其结构,以查看其中是否有任何子元素。请记住,属性 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
}

希望我能够帮到您!


我想你是从http://stackoverflow.com/questions/1260063/determine-if-xml-file-contains-data-c-sharp获取的这个内容,但不幸的是这并没有帮助他。 - Vignesh Kumar A
实际上我最近使用过它,但我不记得是怎么找到它的。很抱歉无法提供帮助。如果你愿意,可以告诉我一些细节,也许我们能找到解决方案... - Pantelis Natsiavas
@PantelisNatsiavas 看,我只想检查我的 XML 是否为空,根据这个检查,我想进行进一步的处理。 - Azad Chouhan
抱歉,我不理解你的评论。我发布的代码是用来检查XML文件是否为空的。你可以使用它来判断你的XML文件是否为空。对吧?我认为另一个过程不是你问题的一部分。 - Pantelis Natsiavas

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.
}

我希望这可以帮到你。
或者,如果你想要这个函数(出于风格原因而不是性能原因),可以自己实现:
public class MyXmlDocument: XmlDocument
{
  bool TryParseXml(string xml){
    try{
      ParseXml(xml);
      return true;
    }catch(XmlException e){
      return false;
    }
 }

使用此函数以了解其是否有效。

来源


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接