如何使用C#读取XML数据

时间:2015-02-22 10:13:30

标签: c# xml

所以这是XML文档:

<Ticket>
    <Tickets>
        <Destination>America</Destination>
        <Destination>Italy</Destination>
        <Destination>China</Destination>
    </Tickets>
</Ticket>

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

这样的字符串
string xmlString = "Tickets/Ticket/*" 

然后像这样运行......

但现在......

我如何找到这个的价格和位置:

    <Ticket> 
   <Tickets>
     <Destination location ="America">520</Destination>
     <Destination location ="Italy">420</Destination>
     <Destination location ="China">320</Destination>
   </Tickets>
</Ticket>

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

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

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

3 个答案:

答案 0 :(得分:1)

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

<Ticket>
 <Tickets>
    <Destination location= "America">520</Destination>
    <Destination location= "Italy">420</Destination>
    <Destination location="China">320</Destination>
  </Tickets>
</Ticket>

您可以通过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"));
 }
}

答案 1 :(得分:0)

这样可行:

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();
                    }  
        }

答案 2 :(得分:0)

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

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