如何使用C#读取XML数据

所以这是XML文档:

  America Italy China   

在我的练习中,很容易找到目的地是什么,你只需要制作一个字符串

 string xmlString = "Tickets/Ticket/*" 

并像这样运行…

但现在…

我怎样才能找到这个的价格和位置:

    520 420 320   

找到价格很容易,与上面相同(第一个例子)……但是如何找到目标标签内的位置?

我的大学给了我第一个例子的练习,很容易……但是当我参加考试时,它与第二个例子类似……但我不知道该怎么办? 我的考试现在已经很久了,所以这不是“作弊”或其他什么,我只是好奇……请帮帮忙? 🙂

PS:我正在使用Visual Studio 2013 Ultimate并使用C#进行编码并使用控制台应用程序,而不是Windows窗体…好吧,我可以使用表单但是你…控制台更快……

您的XML无效。 您在Destination元素中缺少属性。 假设您想要阅读类似下面的内容:

   520 420 320   

你可以通过XmlTextReader来做到这一点:

 var reader = new XmlTextReader(@"Data.xml"); while (reader.Read()) { reader.MoveToContent(); if (reader.NodeType == XmlNodeType.Element && reader.Name == "Destination") { Console.WriteLine(reader.GetAttribute("location")); } } 

这样可行:

 static void Main(string[] args) { XmlTextReader xReader = new XmlTextReader(@"../../Ticket.xml"); //xReader.WhitespaceHandling = WhitespaceHandling.None; XmlDocument xDoc = new XmlDocument(); xDoc.Load(xReader); //XmlNodeList xNodeList = xDoc.DocumentElement.SelectNodes("//Ticket/Tickets/@*"); XmlNodeList elemList = xDoc.GetElementsByTagName("Destination"); for (int i = 0; i < elemList.Count; i++) { string attrVal = elemList[i].Attributes["location"].Value; string elemVal = elemList[i].InnerText.ToString(); Console.WriteLine("Location: " + attrVal + " " + "Price: " + elemVal); Console.ReadLine(); } } 

除了其余的答案,我将添加以下内容 – C#提供了四种不同的解析和处理XML数据的方法:

  • LINQ to XML
  • 的XmlDocument
  • 的XPathNavigator
  • XmlTextReader的

我建议你仔细阅读所有四个,以便决定你需要哪一个。 它们在性能方面有所不同(处理大型XML文件时的速度,内存占用等)。 XmlDocument和XPath是基于DOM的解析工具,这意味着通过创建包含所有对象及其属性的XML树,将XML加载到RAM中。 这导致两件事 – 处理大型XML文档时内存占用量增加(大约1:10比例,1 =文件需要的磁盘空间,10 = DOM需要的内存空间)但同时您可以像任何树一样遍历树在那里,访问所有元素没有问题,等等。 另一方面,XmlReader用于以流方式处理XML数据 – 您解析一个元素,然后,如果您没有自己存储数据,它就会消失。 你不能向后跳(在这种情况下你必须重新开始然后迭代,直到你到达所需的前任)并且你不能直接访问后继(除非它真的是一个直接后继者)而不迭代中间的所有元素。 速度方面已经进行了很多讨论,但我发现所有解决方案都足够快,可以满足您日常生活中常用的XML要求。 可能存在的唯一重大问题是每个产生的内存占用量。 考虑到XML的结构,我会选择XmlReader。