XML C#快速查找节点的方法

时间:2009-03-10 14:59:30

标签: .net xml

您好我是XML和.NET的新手。我想知道如何解析以下文件。我希望能够根据我将提供的ID获取XmlNode。例如:

<Data>
<Question id="1">
<Answer>ddd</Answer>
</Question>
</Data>

我想以某种方式这样做:

XmlDocument myDoc = new XmlDocument();
XmlElement myElem = myDoc.GetElementById("1");
Response.Write("Answer: "+myElem.ChildNodes[0].InnerXML);

这应该给我输出:“答案:ddd”。

非常感谢任何帮助,谢谢。

另外我不想使用LINQ,因为我想先掌握.NET的XML组件。

5 个答案:

答案 0 :(得分:3)

没有汇编就注意它:

XmlNode node = myDoc.SelectSingleNode(“Data / Question [@ id ='1'] / Answer”); Response.Write(“答案:”+ node.InnerText);

当然,如果你想要变量,那么将1改为参数是理想的。

答案 1 :(得分:2)

伪代码:myDoc.selectSingleNode(“//问题[@ id = whatever]”)(顶一下)

答案 2 :(得分:2)

在LINQ之前,我会使用带有XPath查询的SelectSingleNode。在上面的示例中,XPath类似于"//Question[@id=1]/Answer"。现在,我使用LINQ,因为至少我理解它,你不必使用XmlDocument对象就节省了开销。通过使用XElement并使用LINQ to XML扩展方法来查询所需的节点,您可以在一行或两行代码中执行整个操作,并且它将表现得更好或更好。

这是LINQ中使用xml片段的一个示例,它甚至不需要实例化对象来使用xml:

string xml = "<Data><Question id=\"1\"><Answer>ddd</Answer></Question></Data>";
string answer = XElement.Parse(xml).Descendants("Question").
    Where(node => node.Attribute("id").Value == "1").
    Descendants("Answer").ElementAt(0).Value;

答案 3 :(得分:1)

.Net的XML组件是一个废话。请不要让自己接受它,只需要LINQ to XML。从各方面考虑,使用起来更快,运行速度更快。

答案 4 :(得分:0)

我认为那些指向Linq并远离XML组件的人是正确的。您可能希望学习或使用XPath以实现非.Net兼容性,Linq允许您根据需要执行此操作。使用XML组件并不好玩。