【问题标题】:Searching elements in a XML在 XML 中搜索元素
【发布时间】:2011-06-26 09:27:46
【问题描述】:

我有一个类似的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>

【问题讨论】:

  • 当然你可以扫描它,但认为这不会很可靠。你为什么不想解析它?这听起来像是一个荒谬的要求。
  • 如果 XML 文件较大,处理时间会很长,不是吗?
  • 好点,但解析器不一定要解析整个文件并将其全部读入内存。 IIRC,常规 XML 和 LINQ to XML 都不会一次将所有数据读入内存。

标签: c# xml search xml-parsing


【解决方案1】:

您可以使用 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 中测试了这两个。

【讨论】:

  • +1 适用于 .NET 1.x,而 Linq-to-XML 很方便,但仅适用于 .NET 3 及更高版本
  • 感谢这两个 sn-ps 对我不起作用的答案。使用LINQ 解决了问题
【解决方案2】:

Linq to Xml 是另一种可能的解决方案,应尽量减少手头任务的处理 更多详情见msdn: http://msdn.microsoft.com/en-us/library/bb387085.aspx

【讨论】:

  • 这是最好的解决方案! LINQ 太棒了! .. 使用LINQ 解决了问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-18
  • 2013-03-26
  • 2016-03-11
  • 1970-01-01
  • 1970-01-01
  • 2023-02-01
相关资源
最近更新 更多