繁体   English   中英

如何使用C#读取XML数据

[英]How to read XML data using C#

所以这是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>

与上面相同(第一个示例),找到价格很容易。但是如何找到目标标记中的位置?

我的大学给我像第一个例子一样的练习,很简单……但是当我参加考试时,它类似于第二个例子……但是我不知道该怎么办? 我的考试很早就完成了,所以这不是“作弊”之类的,我很好奇...请帮助? :)

PS:我正在使用Visual Studio 2013 Ultimate,并使用C#和控制台应用程序(而不是Windows窗体)进行编码...嗯,我可以使用窗体,但是...控制台速度更快...

您的XML无效。 您缺少“目标”元素中的属性。 假设您想阅读类似于以下内容的内容:

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

所以这有效:

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数据的方式:

我建议您阅读一些有关这四个方面的内容,以便确定您需要哪个。 它们的性能确实有所不同(处理大型XML文件时的速度,内存占用等)。 XmlDocument和XPath是基于DOM的解析工具,这意味着可以通过创建其中包含所有对象及其属性的XML树来将XML加载到RAM中。 这导致两件事:处理大型XML文档时内存占用增加(比率为1:10,文件空间需要1 =磁盘空间,DOM需要空间10 =内存空间),但是同时您可以像任何树一样遍历树在那里,可以毫无问题地访问其所有元素,依此类推。 另一方面,XmlReader用于以流方式处理XML数据-您解析一个元素,然后,如果您自己还没有存储数据,那么它就不复存在了。 您不能后退(在这种情况下,您必须重新开始,然后进行迭代,直到到达所需的前任为止),并且不能直接访问后继对象(除非它确实是直接后继对象),而无需在其间的所有元素之间进行迭代。 在速度方面,已经进行了很多讨论,但是我发现所有解决方案都足够快,可以满足您在日常生活中所做的常规XML工作。 一个人可能遇到的唯一大问题是每个人产生的内存占用量。 考虑到XML的结构,我将使用XmlReader。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM