大家好我想检查我的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
是否为空?
现在我收到此错误
答案 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;
}
}
使用此功能知道它是否有效