#c#
#c#
Вопрос:
У меня вопрос о том, как я могу выполнить поиск в XML-файле и получить узел, соответствующий тексту, который я предоставляю. Пример:
<bookstore>
<book>
<title>The Autobiography of Benjamin Franklin</title>
<author>
<first-name>Benjamin</first-name>
<last-name>Franklin</last-name>
</author>
<price>8.99</price>
</book>
</bookstore>
Я хочу выполнить поиск узла, на котором есть текст Benjamin, и заставить программу сохранить XmlNode . Как я могу это сделать? Кто-нибудь может предоставить пример кода для этого примера?
Спасибо
Ответ №1:
Взгляните на это:https://web.archive.org/web/20211020111721/https://www.4guysfromrolla.com/articles/062310-1.aspx
Linq упрощает поиск в XML.
Вот пример:
XDocument doc = XDocument.Load("C:\yourxml.xml");
XElement element =
doc.Element("bookstore")
.Descendants("book")
.Where(a => a.Element("author")
.Element("first-name").Value.Equals("Benjamin"))
.First();
Комментарии:
1. я не могу заставить это работать. проблема в том, что после части «потомки» («книга») нет опции для команды where…
Ответ №2:
Попробуйте это:
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element:
break;
case XmlNodeType.Text:
if (reader.Value.Equals(wrd)) // string wrd equals Benjamin
{
}
break;
}
Ответ №3:
LDAdams предлагает LINQ для XML, что является очень хорошим вариантом. Вы также можете использовать объекты XML DOM в .NET и использовать запросы XPath для поиска нужного узла. Любой из этих вариантов является приемлемым. Преимущество LINQ to XML в том, что в нем используются методы расширения, а не XPath, что упрощает получение ответа разработчиком, не разбирающимся в XML. Кроме того, знания, по крайней мере частично, применимы к другим производным LINQ.
Ответ №4:
XPath
XmlDocument dom = new XmlDocument ( );
dom.LoadXml ( xml );
var nodes = dom.SelectNodes ( "//*[text()='Benjamin']" );