C# 读取保存xml文件

直接读取xml文件中的内容

         XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(result);
XmlNode root = xmlDoc.SelectSingleNode("//response");
if (root != null)
{
string error = (root.SelectSingleNode("error")).InnerText;
}

代码来源:https://www.cnblogs.com/kongxiaoshuang/p/6512328.html

这种方法存在一个缺点就是当xml文件中存在<!DOCTYPE>,eg:<!DOCTYPE nvidia_smi_log SYSTEM "nvsmi_device_v10.dtd"> 而你有缺少了dtd文件会导致读取xml文件报错

<!DOCTYPE>详细:http://www.w3school.com.cn/tags/tag_doctype.asp

因此需要取消对该标签的读取,这是读取nvidia-smi -p -x输出出来的显卡的显存信息

 private static void Getxml(ref string total, ref string free)
{
try
{
XmlDocument xmldoc = new XmlDocument();
XmlReaderSettings setting = new XmlReaderSettings();
setting.DtdProcessing = DtdProcessing.Ignore; //忽视dtd
XmlReader reader = XmlReader.Create(savepath, setting);
xmldoc.Load(reader);
XmlNodeList topM = xmldoc.SelectNodes("//fb_memory_usage");
foreach (XmlElement element in topM)
{
total = element.GetElementsByTagName("total")[0].InnerText.Replace(" MiB","");
free = element.GetElementsByTagName("free")[0].InnerText.Replace(" MiB", "");
}
reader.Close(); }
catch (Exception)
{
total = "0.0";
free = "0.0";
}
finally
{
if (File.Exists(savepath))
{
File.Delete(savepath);
}
}
}

保存xml

   FileStream writeStream = new FileStream("E:\\aaaa.txt", FileMode.Create);
XmlSerializer serializer = new XmlSerializer(data.GetType()); //xml对象
serializer.Serialize(writeStream, data);
writeStream.Close();
上一篇:WPF 触摸屏多点触控图像的缩放旋转和移动


下一篇:[HNOI2014]画框