Как получить <p>значений элементов в XML? - PullRequest
0 голосов
/ 04 февраля 2012
XDocument coordinates = XDocument.Load("http://feeds.feedburner.com/TechCrunch");
System.IO.StreamWriter StreamWriter1 = new System.IO.StreamWriter(DestFile);
XNamespace nsContent = "http://purl.org/rss/1.0/modules/content/";
foreach (var item in coordinates.Descendants("item"))
{
   string link = item.Element("guid").Value;
   string content = item.Element(nsContent + "encoded").Value; //It gets all links, images etc 
}

StreamWriter1.Close();

с помощью этого я могу получить guid значения элемента, а также content:encoded значения, но значение content:encoded элемента получает все ссылки, теги,

теги и т. Д.

Но я хочу только текст ... Означает, что мне нужны только простые текстовые данные и мне не нужно получать какие-либо ссылки, ссылки и т. Д.

Как я могу разобрать тег <p>..</p>данные в XML?Пожалуйста, предложите Спасибо

Ответы [ 3 ]

2 голосов
/ 04 февраля 2012

Хорошо, у вас есть HTML, встроенный в этот XML-документ.Самое безопасное, что нужно сделать, это взять этот HTML-код и проанализировать его с помощью HTML-анализатора, такого как HTML Agility Pack , и перейти оттуда.Это не должно быть так сильно отличается.Обратите внимание, что HTML-код все еще немного закодирован, поэтому вам придется сначала его декодировать.

const string url = "http://feeds.feedburner.com/TechCrunch";
var doc = XDocument.Load(url);
var items = doc.Descendants("item");
XNamespace nsContent = "http://purl.org/rss/1.0/modules/content/";
foreach (var item in items)
{
    var encodedContent = (string)item.Element(nsContent + "encoded");
    var decodedContent = System.Net.WebUtility.HtmlDecode(encodedContent);
    var html = new HtmlDocument();
    html.LoadHtml(decodedContent);
    var ps = html.DocumentNode.Descendants("p");
    foreach (var p in ps)
    {
        var textContent = p.InnerText;
        // do something with textContent
    }
}

К сожалению, HTML не выглядит очень хорошо сформированным XML, поэтому вы не сможетеиспользовать LINQ to XML с этой частью.

1 голос
/ 04 февраля 2012

Используйте xpath, что-то вроде:

//p

Это должно сделать это для запроса xpath. Вот ссылка для используемой вами библиотеки.

0 голосов
/ 04 февраля 2012

Как только вы определили строку содержимого, у вас есть несколько различных опций:

  1. Используйте регулярные выражения для выделения и удаления чего-либо внутри тегов.Это удалит все теги из текста и (теоретически) оставит вас только с текстом, если это то, что вас интересует.
  2. Разбор самого текста и создание текстового вывода.Я сделал нечто подобное в этом сценарии powershell (https://github.com/joelmartinez/PowerShell-Bits/blob/master/GetTextFromHtml.ps1). Я загружаю некоторый HTML в dom, используя HtmlAgilityPack , а затем обхожу дерево dom, чтобы извлечь текстовые узлы.
...