Я пишу программу для анализа XML-файла (с содержимым книги).Xml Анализ с использованием SelectNodes и Xpath
То, что я сделал,
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]");**
Любая помощь приветствуется, спасибо !
EDIT: Мне удалось обойти это, сделав цикл foreach для узлов в bookList с if, чтобы сравнить цены. InnerText с наивысшим. Он работает отлично, но я все равно хотел бы знать, можно ли это сделать с XPath. Благодаря!
EDIT # 2: Я понимаю, что его можно улучшить при использовании разных подходов, я просто хочу знать, можно ли сравнить строковую переменную с значениями узлов с помощью XPath.
какой-либо причина вы не используете Linq2Xml? Linq предоставляет очень простой способ выбора, сортировки, упорядочивания и фильтрации узлов XML. –
Существует такой вид, упомянутый в [social.msdn] (https://social.msdn.microsoft.com/Forums/en-US/60ba8eef-4318-4361-a434-e07efc7bdc77/xml-filter-and-sort?forum = xmlandnetfx). ты это пробовал? – lloyd
@Erik Я не знаком с Linq2Xml, но я загляну в него. Я исследовал Xpath почти на час и нашел много способов сравнить значения, но не переменные, поэтому вопрос. – Ankit