C #: поиск значения в xml-теге

#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']" );