Использование LINQ в XML для запроса атрибутов ширины и высоты для каждого тега в XML-документе

#linq-to-xml

#linq-to-xml

Вопрос:

Я конвертирую HTML-файлы в XML. Как мне использовать LINQ to XML для запроса атрибутов width amp; height для каждого <img> тега в документе? Независимо от их расположения в документе.

Ответ №1:

Прежде всего LINQ to XML работает с XML, а HTML-документ обычно не следует правилам синтаксиса XML. Таким образом, если у вас нет правильно сформированного документа XHTML, LINQ в XML не помогает обрабатывать ваш HTML-документ.

Если у вас есть правильно сформированный документ XHTML, выполните, например

 XDocument doc = XDocument.Load("doc.xhtml");
XNamespace xhtml = "http://www.w3.org/1999/xhtml";
var imagedata = from img in doc.Descendants(xhtml   "img")
                select new { width = (int)img.Attribute("width"), height = (int)img.Attribute("height") };
  

Однако предполагается, что любой элемент img в документе имеет как атрибут with, так и атрибут height. В противном случае вы получите исключение. Помогает ли это? Если у вас есть произвольные HTML-документы, которые не могут быть проанализированы как XML, вы можете заглянуть в HTML agility packhttp://htmlagilitypack.codeplex.com / вместо этого.

Ответ №2:

   XElement xmlDoc = XElement.Load("doc.xml");
  foreach (var descendant in xmlDoc.Descendants("img"))
        {
           if (descendant.Attribute("width") != null)
                System.Diagnostics.Debug.WriteLine(descendant.Attribute("width"));

          ..........
        }
  

Также LINQ в HTML выглядит многообещающе.