C# 在XML中搜索元素

C# 在XML中搜索元素,c#,xml,search,xml-parsing,C#,Xml,Search,Xml Parsing,我有一个类似的XML文件,我需要它来搜索它的值。。例如,当输入产品名称时,应显示相关价格 是否有比通过循环解析和搜索值更简单的方法 <products> <product> <Name> PRODUCT 1</Name> <price>150</price> </product> <product> <Name> PRODUCT

我有一个类似的XML文件,我需要它来搜索它的值。。例如,当输入产品名称时,应显示相关价格

是否有比通过循环解析和搜索值更简单的方法

<products>
    <product>
      <Name> PRODUCT 1</Name>
      <price>150</price>
    </product>
    <product>
      <Name> PRODUCT 2</Name>
      <price>250</price>
    </product>
    <product>
      <Name> PRODUCT 3</Name>
      <price>300</price>
    </product>
  <products>
您可以使用XPath:

XmlDocument doc = new XmlDocument();
doc.Load("myfile.xml");
XmlNode myPrice = doc.SelectSingleNode("/products/product[Name=' PRODUCT 1']/price");
Console.WriteLine(myPrice.InnerText);
输出

150
请注意,产品标识符前的空格很重要

如果愿意,可以使用XPathDocument执行相同的操作:

XPathDocument doc = new XPathDocument("myfile.xml");
XPathNavigator xpath = doc.CreateNavigator();
XPathNavigator myPrice = xpath.SelectSingleNode("/products/product[Name=' PRODUCT 1']/price");
Console.WriteLine(myPrice.ToString());
也输出

150
在.NET 2.0中测试了这两个选项。

您可以使用XPath:

XmlDocument doc = new XmlDocument();
doc.Load("myfile.xml");
XmlNode myPrice = doc.SelectSingleNode("/products/product[Name=' PRODUCT 1']/price");
Console.WriteLine(myPrice.InnerText);
输出

150
请注意,产品标识符前的空格很重要

如果愿意,可以使用XPathDocument执行相同的操作:

XPathDocument doc = new XPathDocument("myfile.xml");
XPathNavigator xpath = doc.CreateNavigator();
XPathNavigator myPrice = xpath.SelectSingleNode("/products/product[Name=' PRODUCT 1']/price");
Console.WriteLine(myPrice.ToString());
也输出

150

在.NET 2.0中测试了这两种方法。

Linq to Xml是另一种可能的解决方案,它可以最大限度地减少对手头任务的处理 有关更多详细信息,请参阅msdn:

Linq to Xml是另一种可能的解决方案,它可以最大限度地减少对手头任务的处理 有关更多详细信息,请参阅msdn:

当然可以扫描,但这不太可靠。你为什么不想解析它?这听起来像是一个荒谬的要求。如果它是一个更大的XML文件,处理时间会很长,不是吗?这一点很好,但解析器不一定要解析整个文件并将其全部读入内存。IIRC,常规XML和LINQ-to-XML都不会一次将所有数据读入内存。当然可以扫描它,但这不是很可靠。你为什么不想解析它?这听起来像是一个荒谬的要求。如果它是一个更大的XML文件,处理时间会很长,不是吗?这一点很好,但解析器不一定要解析整个文件并将其全部读入内存。IIRC,常规XML和LINQ-to-XML都不会一次将所有数据读入内存。+1在.NET 1.x上工作,而LINQ-to-XML很方便,但仅在.NET 3和Uphanks中可用。这两个代码段对我都不起作用。。使用LINQ+1从.NET1.x开始就可以解决这个问题,而LINQtoXML很方便,但只在.NET3和Uphanks中可用。这两个代码段对我都不起作用。。使用LINQT解决问题这是最好的解决方案!林克很棒。。使用LINQT解决问题这是最好的解决方案!林克很棒。。使用LINQ解决了这个问题