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;