C++ Builder AnsiString удалить все, кроме <...>

Я имею: Memo2->Text= IdHTTP1->Get("http://www.twitch.tv/starladder1");

В Memo2:

`<!DOCTYPE html>
<html lang='en' style='overflow: hidden;' xml:lang='en' xmlns:fb='http://www.facebook.com/2008/fbml' xmlns:og='http://opengraphprotocol.org/schema/' xmlns='http://www.w3.org/1999/xhtml'>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<title>Twitch</title>
<meta content='IE=edge,chrome=1' http-equiv='X-UA-Compatible'>
<meta content='app-id=460177396, app-argument=twitch://open' name='apple-itunes-app'>
<meta content='Twitch' name='description'>
<link href='/favicon.ico' rel='shortcut icon' type='image/x-icon'>
<meta content='general' name='rating'>
<meta content='NIH9y45AePyUB62Ur2myinvJOvH77ufgjd6wKiQB6sA' name='google-site-verification'>
<a href='https://plus.google.com/115463106831870703431' rel='publisher'></a>
<meta content='Twitch' property='og:site_name'>
<meta content='161273083968709' property='fb:app_id'>
<meta content='streamname' property='og:title'>
<meta content='STREAM NAME STREAM NAME' property='og:description'>
<meta content='http://static-cdn.jtvnw.net/jtv_user_pictures/starladder1-profile_image-557367f831a49ebb-600x600.png' property='og:image'>
<meta property='og:url'>
<meta content='video.other' property='og:type'>
<meta content='http://www-cdn.jtvnw.net/swflibs/TwitchPlayer.swf?channel=starladder1&playerType=facebook' property='og:video'>
<meta content='https://www-cdn.jtvnw.net/swflibs/TwitchPlayer.swf?channel=starladder1&playerType=facebook' property='og:video:secure_url'>
<meta content='application/x-shockwave-flash' property='og:video:type'>
<meta content='378' property='og:video:height'>
<meta content='620' property='og:video:width'>`

Как удалить ВСЕ, кроме 'STREAM NAME STREAM NAME'. Мне нужно Label1->Caption='STREAM NAME STREAM NAME'.

1 ответ

Решение

Рассматриваемый сайт использует XHTML, который совместим с XML, поэтому вы можете использовать любой XML-парсер для извлечения значений, например Embarcadero. TXMLDocument компонент или любое количество сторонних парсеров (я сам предпочитаю libXML2). Вы заинтересованы в content атрибут meta элемент которого property атрибут og:description, После анализа XHTML вы можете вручную просмотреть элементы, просматривая property атрибуты, пока вы не найдете тот, который вы хотите, или вы можете использовать запрос XPath, чтобы найти этот конкретный элемент, например: /html/head/meta[@property='og:description']

Обновление: оказывается, что рассматриваемый сайт использует искаженный XHTML, поэтому анализатор XML не будет правильно его обрабатывать. Поэтому вместо этого найдите сторонний анализатор HTML/XHTML или просто выполните простой поиск по подстроке вручную, например:

String Resp = IdHTTP1->Get("http://www.twitch.tv/starladder1");
String StreamName;

int i = Resp.Pos("property='og:description'");
if (i != 0)
{
    i = PosEx("content='", Resp, RPos("<meta ", Resp, i)) + 9;
    StreamName = Resp.SubString(i, PosEx("'", Resp, i) - i);
}
Label1->Caption = StreamName;
Другие вопросы по тегам