所以这是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窗体...好吧,我可以使用表单但是你...控制台更快......答案 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。