【发布时间】:2015-04-23 04:51:38
【问题描述】:
我正在编写一个程序来解析 XML 文件(带有书籍内容)。
我做了什么,
XmlDoc = new XmlDocument();
XmlDoc.Load(path);
bookList = XmlDoc.GetElementsByTagName("book");
List<string> prices= new List<string>();
foreach (XmlNode node in bookList)
{
XmlNode price = node["price"];
prices.Add(price.InnerText);
}
// to get the highest priced book(s)
prices.Sort();
我现在想做的是使用 SelectNodes 来查找价格最高的书籍,并将其作为 XMLNodeList 返回
//to store the highest price of a book
string highest = prices[0];
**// this is what i can't figure out
XmlNodeList expensiveList = XmlDoc.SelectNodes("descendant::book[price = highest]");**
感谢任何帮助,谢谢!
编辑:我设法通过为 bookList 中的节点创建一个 foreach 循环来解决它,并使用 if 案例将 price.InnerText 与最高值进行比较。 它工作得很好,但我仍然想知道这是否可以用 XPath 完成。谢谢!
编辑#2:我知道可以使用不同的方法对其进行改进,我只是想知道是否可以使用 XPath 将字符串变量与节点值进行比较。
【问题讨论】:
-
有什么理由不使用 Linq2Xml? Linq 提供了一种非常简单的方法来选择、排序、排序和过滤 XML 节点。
-
social.msdn 中提到了一种排序。你试过吗?
-
@Erik 我对 Linq2Xml 不熟悉,但我会研究一下。我研究了 Xpath 近一个小时,发现了许多比较值而不是变量的方法,因此提出了问题。
-
@dbc 我想将字符串变量与文件中的节点值进行比较,这与范围比较 b/w 相同节点有何关系?