【发布时间】:2021-04-24 19:22:24
【问题描述】:
大家好,最近我一直在制作 ac# 应用程序来读取 xml 文件并且它可以工作,但现在我的任务是让它这样做并从某个文件夹内的多个 xml 文件中读取某些节点,现在我不工作了并在标题中显示该错误。
using System;
using System.Xml;
using System.IO;
namespace XmlReaderConsoleAPP
{
class Program
{
static void Main()
{
ProcessFile(@"C:\XMLFiles\SaintGobain_Pam_20210118.xml");
try
{
var path = @"C:\XMLFiles\SaintGobain_Pam_20210118.xml";
DirectoryInfo di = new DirectoryInfo(path);
foreach (var file in Directory.GetFiles(path))
{
}
Console.ReadKey();
}
catch(Exception ex)
{
Console.WriteLine("Erro: {0}", ex.Message);
return;
}
static void ProcessFile(string Filename)
{
XmlDocument xml = new XmlDocument();
xml.LoadXml(Filename);
XmlNodeList xnLista = xml.SelectNodes(@"//ImportSession/Batches/batch/Documents/Document/Pages/Page");
Console.WriteLine($"Selected {xnLista.Count} nodes");
int i = 0;
foreach (XmlNode xn in xnLista)
{
Console.WriteLine($"{++i} {xn.Name}: {xn.Attributes["ImportFileName"].Value}");
}
XmlNodeList xnLista2 = xml.SelectNodes(@"//IndexFields/IndexField");
Console.WriteLine($"Selected {xnLista2.Count} nodes");
int j = 0;
foreach (XmlNode xn in xnLista2)
{
Console.WriteLine($"{++j} {xn.Name}: {xn.Attributes["Value"].Value}");
//string error = xn.Attributes["ErrorMessage"]?.Value;
//if (string.IsNullOrEmpty(error))
//{
//}
//elsex
//{
//}
}
Console.WriteLine(Filename);
}
}
}
}
如果你们发现错误,请帮助我,因为我需要它。 ps:xml文件同根ImportSession/Batches/Batch/Documents/Document/Pages/Page
【问题讨论】:
-
程序的结构似乎有点不对劲。您可能希望从 main 方法中提取 ProcessFile 方法(如果这不仅仅是复制和粘贴错误)。然后,您似乎两次处理同一个文件。一旦硬编码,然后再次进入循环(我建议使用 EnumerateFiles,顺便说一句)。但是,在循环内部,什么都没有发生?不太对,我猜。
-
@Fildor 更糟糕的是,OP 只处理文件一次,整个循环在这里毫无意义,因为 XML 内部存在一个尚未提供的问题。
-
@Tiago 请检查您的代码,逐行慢慢调试。还要检查您在第 1 行指定的文件的内容,我认为它不是有效的 XML
-
@DavidG “但在循环内部,什么都没有发生?我猜不太对。” - 我意识到了这一点。 :)
-
@Fildor 你说 OP 正在处理文件两次,我只是说这不是真的。
标签: c# xml xml-parsing