XML: поиск элементов для конкретного текста с использованием C # - PullRequest
1 голос
/ 08 марта 2012

Я пытаюсь получить список ссылок в формате PDF с разных сайтов.Сначала я использую класс веб-клиента для загрузки исходного кода страницы.Затем я использую sgmlReader для преобразования HTML в XML.Поэтому для одного конкретного сайта я получу тег, который выглядит следующим образом:

<p><a href="pub/1985_to_1997_Board_Action_Summary.pdf">1985 to 1997 Board Action Summary</a></p>

Мне нужно получить все ссылки, которые содержат «.pdf».Очевидно, что не все сайты имеют одинаковую структуру, поэтому простой поиск тега <p> не будет достаточно динамичным.Я бы предпочел не использовать linq, но я буду использовать, если придется.Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 08 марта 2012

Линк делает это легко ...

var hrefs = doc.Root.Descendants("a")
    .Where(a => a.Attrib("href").Value.ToUpper().EndsWith(".PDF"))
    .Select(a => a.Attrib("href"));

уходи! (примечание: это сделано из памяти, поэтому вам, возможно, придется это исправить)

Это сломается для <a/> тегов, которые не имеют href (якоря), но вы можете это исправить наверняка ...

1 голос
/ 08 марта 2012

Я думаю, у вас есть 2 варианта здесь. Если вам нужны только ссылки, вы можете использовать регулярные выражения, чтобы найти совпадения для строк, заканчивающихся на .pdf. Если вам нужно манипулировать структурой XML или получать другие значения из XML, было бы лучше использовать XmlDocument и использовать запрос XPath, чтобы найти узлы, на которых есть ссылка на файл PDF. Использование LINQ to XML просто уменьшает количество строк кода, которые вы должны написать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...