主页
Top.Mail.Ru Yandeks.Metrika
论坛:“初学者”;
当前存档:2018.04.29;
下载:[xml.tar.bz2];

向下

XML问题 找到类似的分支


Вэн ©   (2016-04-21 17:55) [0]

大家好日子。
В общем стоит задача разработать приложение для работы с программой телепередач. С XML раньше вообще дел не имел, но как-то информацию подтягивать в программу надо. Тут 2 варианта:
1. ручками в табличку вбивать;
2. парсить с какого-нибудь сайта или файла.
Нашёл вот такой сайт http://www.teleguide.info/ там выкладываются программы в форматах JTV и XMLTV.
Я соответственно выбрал второй вариант. Скачал архивчик. Файл преставляет из себя вот такую структуру:

<?xml version="1.0" encoding="utf-8" ?><!DOCTYPE tv SYSTEM "http://www.teleguide.info/download/xmltv.dtd">
<tv generator-info-name="TVH_W/0.751l" generator-info-url="http://www.teleguide.info/">
<channel id="1">
<display-name lang="ru">Первый канал</display-name>
<icon src="http://www.teleguide.info/img/channel/1.gif" />
</channel>
<channel id="2">
<display-name lang="ru">Россия 1</display-name>
<icon src="http://www.teleguide.info/img/channel/2.gif" />
</channel>

...

<programme start="20160418050000 +0300" stop="20160418090000 +0300" channel="1">
<title lang="ru">Телеканал "Доброе утро" (12+)</title>
<category lang="ru">Развлекательные</category>
</programme>
<programme start="20160418090000 +0300" stop="20160418092000 +0300" channel="1">
<title lang="ru">Новости (12+)</title>
<category lang="ru">Информационные</category>
</programme>
<programme start="20160418092000 +0300" stop="20160418095000 +0300" channel="1">
<title lang="ru">Контрольная закупка (12+)</title>
<category lang="ru">Познавательные</category>
</programme>
<programme start="20160418095000 +0300" stop="20160418105500 +0300" channel="1">
<title lang="ru">Жить здорово! (12+)</title>
<category lang="ru">Познавательные</category>
</programme>
<programme start="20160418105500 +0300" stop="20160418120000 +0300" channel="1">
<title lang="ru">Модный приговор (12+)</title>
<category lang="ru">Развлекательные</category>
</programme>

....

<programme start="20160424230000 +0300" stop="20160425000000 +0300" channel="503338">
<title lang="ru">Faras (12+)</title>
<desc lang="ru">Policija gaudo u&#382; &#382;mog&#382;udyst&#281; ie&#353;kom&#261; vyr&#261;. Jei vyras bus sulaikytas, jo dukra pateks &#303; na&#353;lai&#269;i&#371; prieglaud&#261;. Nor&#279;dami i&#353;likti laisvi jie pab&#279;ga &#303; laukin&#281; gamt&#261;. Faras - u&#382;uomina &#303; Portugalijos miest&#261;, kuriame t&#279;vas syk&#303; lank&#279;si.</desc>
</programme></tv>


И вот из этого файла я хочу "вытянуть" данные:

ЕСЛИ ВОЗМОЖНО
1. значения channel id/display-name/icon src нужно передавать, например в кнопки компонента ButtonGroup или в SpeedButton, чтоб помимо названия канала в кнопке отображался и его значок;
2. по нажатию на кнопку канала в окно (вот тут я честно говоря не знаю, во что лучше выводить информацию т.к. не знаю какую информацию должен выдавать файл, возможно будет достаточно и Memo, а может лучше будет на WebBroesr вывести) программу соответствующего id канала;
3. не нашёл стандартный компонент, может есть какой сторонний, чтобы можно было сделать наподобие как в Office есть настройка ленты, там что-то на подобие CheckListBox(а) только с иконками кнопок. Хочу сделать в программе наподобие, только для добавления/удаления каналов.

В общем, как говорится - ЧТО я хочу я знаю, а как это переложить на язык дельфи вот тут уже возник затык и мне нужна помощь и советы по реализации данной задачи.



Kerk ©   (2016-04-21 18:13) [1]

要在按钮上显示图像,您需要先下载此图像



Dimka Maslov ©   (2016-04-21 22:40) [2]

IXMLDocument允许您获取所有内容。 然后问题仍然存在,如何最好地展示它。



sniknik ©   (2016-04-22 08:43) [3]

> разработать приложение для работы с программой телепередач
та есть rss, и есть кучи просмотрщиков  rss-a. даже с исходным кодом можно найти. лучше использовать его/готовую программу.

чтобы не парится с картинками/сделать более универсально делать все в браузере, на яваскрипте, формируя "псевдо сайт" основываясь на rss канале. распространять проще будет. дельфи не нужен, вообще... ну может положить на форму twebиrowser и у казать внем урл, и все.



Вэн ©   (2016-04-22 09:30) [4]


> Dimka Maslov©(21.04.16 22:40)[2]
>
> А потом останется вопрос, как лучше это отобразить.

Вот как раз этот вопрос и стоит, по большему счёту, компонент ТXMLDocument я на форму кинул, файл вроде подгрузил, а вот как информацию из него отобразить...

Вроде нашёл один интересный пример:

XML:

<wm.exchanger.response>
 <BankRate direction="RUR/USD">31,6062</BankRate>
 <WMExchnagerQuerys amountin="WMZ" amountout="WMR">
   <query id="2224747" amountin="11606,48"/>
   <query id="2224748" amountin="11606,48"/>
   <query id="2224749" amountin="11606,48"/>
 </WMExchnagerQuerys>
</wm.exchanger.response>


Пример решения в дельфе:
...
XMLDocument.Active:=true;
with XMLDocument.DocumentElement do
 begin
   direction:=VarToStr(ChildNodes["BankRate"].Attributes["direction"]); //получаем RUR/USD
   BankRate:=VarToStr(ChildValues["BankRate"]); //получаем 31,6062
   amountin:=VarToStr(ChildNodes["WMExchnagerQuerys"].Attributes["amountin"]); //получаем WMZ
   id:=VarToStr(ChildNodes["WMExchnagerQuerys"].ChildNodes.Nodes[1].Attributes["id" ]); //получаем 2224748
 end;
XMLDocument.Active:=false;
...


На первый взгляд вроде всё просто. Но там у человека и задачка вроде простенькая - получать с сайта курс доллара, а тут поди разбери...

вот эта часть вроде не сложная
<channel id="1"> - с этим я вообще не знаю как быть, по идее id="i"  должен каким-то образом выводить программу канала channel="i" возможно в WebBrowser или куда-то ещё, в зависимости от того, где представление информации будет выглядеть более т.с. презентабельно =)

<display-name lang="ru">Первый канал</display-name> - это нужно выводить в свойство Caption кнопки (например),

<icon src="http://www.teleguide.info/img/channel/1.gif" /> - это скачивать в какой-то каталог откуда будут подтягиваться иконки кнопок


вот тут уже чуть по сложнее задачка
<programme start="20160418050000 +0300" stop="20160418090000 +0300" channel="1"> - каким-то образом нужно start и stop переводить в нормальный вид. В данном примере start= 05:00  18.04.2016 stop= 09:00  18.04.2016, что такое +0300 вообще не понятно...Московское время по UTC? Тогда надо как-то сделать, чтоб была возможность смены часового пояса, мне допустим Хабаровское время нужно, а не Московское, в таком случае нужно каким-то образом подменять +0300 на +1000. Ну и channel="i" о котором я писал выше - по нажатию кнопки соответствующей каналу id="i" из channel="i" должен загружаться перечень передач,

<title lang="ru">Телеканал "Доброе утро" (12+)</title>
<category lang="ru">Развлекательные</category> - title и category можно я так понимаю получить примерно так же => "BankRate:=VarToStr(ChildValues["BankRate"]); //получаем 31,6062", только тут выдаёт единственное значение, а у меня получается целый список, при чём значения привязаны к значениям времени - когда наступает определённое время (start) в программе выделяется передача которая сейчас идёт и сколько времени до её окончания (stop).
</programme>


Вот всё расписал, вроде всё элементарно и просто да? А как это реализовать на практике - не знаю т.к. как я уже говорил с XML работать приходится впервые...


> Kerk©(21.04.16 18:13)[1]
>
> Чтобы показать изображение на кнопке, нужно это изображение сначала скачать


Ну вот видимо придётся так и сделать. Я зачем-то хотел иконки цеплять напрямую с сайта.

А всё-таки по 3-ему пункту хоть он напрямую к теме топика не относится (но в тот компонент тоже нужно будет на самом деле из первой части файла данные подтягивать) кто-нибудь может что-нибудь подсказать? Возможно можно каким-то образом воткнуть иконки каналов в стандартный CheckListBox? Или может, как вариант попробовать модифицировать CheckListBox добавив в него возможность вставки иконки и залепить его как новый компонент...



Вэн ©   (2016-04-22 09:47) [5]


> sniknik©(22.04.16 08:43)[3]
>
> > разработать приложение для работы с программой телепередач
> та есть rss, и есть кучи просмотрщиков  rss-a. даже с исходным
> кодом можно найти. лучше использовать его/готовую программу.
>
>
> чтобы не парится с картинками/сделать более универсально
> делать все в браузере, на яваскрипте, формируя "псевдо сайт"
> основываясь на rss канале. распространять проще будет. дельфи
> не нужен, вообще... ну может положить на форму twebиrowser
> и у казать внем урл, и все.


Угу...если б я эту программу писал от нечего делать я бы не заморачивался, но мне её нужно по учёбе, там задание разработать
информационную систему с применением динамических структур данных. Обеспечить возможность выполнения следующих операций над выбранными структурами данных:
1. инициализацию;
2. добавление новых элементов;
3. удаление элементов;
4. перемещение по структуре данных;
5 поиск элементов структуры данных, отвечающих заданным критериям;
6. вывод всех элементов структуры данных на экран.
У меня по варианту программа телепередач.
Так что я думаю предлагаемый тобой вариант тут вообще ни как не подходит, к сожалению.



Плохиш ©   (2016-04-22 09:50) [6]


> Вэн ©   (22.04.16 09:30) [4]
>
>
>> Dimka Maslov©(21.04.16 22:40)[2]
>>
> > А потом останется вопрос, как лучше это отобразить.
>
> Вот как раз этот вопрос и стоит, по большему счёту, компонент
> ТXMLDocument я на форму кинул, файл вроде подгрузил, а вот
> как информацию из него отобразить...


> Вот всё расписал, вроде всё элементарно и просто да? А как
> это реализовать на практике - не знаю т.к. как я уже говорил
> с XML работать приходится впервые...
>

Какая связь между выделенными фразами?

PS. Т.к. ветка не в начинающим, рискну предложить нанять дизайнера и программиста.



Dimka Maslov ©   (2016-04-22 10:18) [7]


>  компонент ТXMLDocument я на форму кинул


Кинуть на форму компонент - это действительно не проблема. Проблема - научится с ним работать.



sniknik ©   (2016-04-22 10:18) [8]

> Но там у человека и задачка вроде простенькая - получать с сайта курс доллара, а тут поди разбери...
суть не меняется, методы работы с xml тоже. радуйся, большему научишься.

> но мне её нужно по учёбе
даже так лучше использовать rss, примеров больше чем с их вариантов, и пользы больше научишься широко распространенному формату/стандарту, а так по сути тот же xml (если в задании оговорен xml).

> 3. удаление элементов;
это лишнее... тебе же редактировать программу передач не нужно. сформировал отобразил, поиск... все в принципе, на следующий день повторить то же самое, а не удалять и заменять.

> предлагаемый тобой вариант тут вообще ни как не подходит
почему это? если делать самому, пусть и в вебе, как учебное ничем не хуже, и вполне реализуемо, все написанное по 1 .. 6.
что не видел сайтов с менюшками/кнопками, или динамически формируемых? или не веришь что на яваскрипте возможны "динамические структуры данных"? зря.  
другое дело в вебе интерфейс делать сложнее. и скорее всего не хочется ради лабы или чего там.



Вэн ©   (2016-04-22 19:04) [9]

> 3. удаление элементов;
это лишнее... тебе же редактировать программу передач не нужно. сформировал отобразил, поиск... все в принципе, на следующий день повторить то же самое, а не удалять и заменять.

Возможно оно и лишнее, но, если реализовывать через XML + добавить возможность настройки списка каналов, то вот как раз и получится "удаление элементов", либо добавление.

Для примера: у меня на дому подключено спутниковое ТВ с кучей каналов, я каналы типа ТНТ и ему подобные не смотрю, соответственно при настройке телевизора я выбрал только то, что мне интересно. Получилось порядка 12-13 каналов и то я их не все смотрю, да и сам телевизор-то по сути включаю редко, НО дело не в этом. Просто у кого-то может быть настроено и больше каналов и этот человек ещё же успевает их все смотреть! О_О И вот для таких случаев как раз и нужен режим в программе для настройки списка отображаемых каналов...мне вот в программе допустим нафиг не нужны ТНТ, СТС, ещё там какие-то каналы есть которые смотрят обычно женщины (что-то там про фитнес что-ли =) ) и прочая муть я могу (пока не могу...не куда) зайти в настройки программы и там отключить лишние каналы, чтоб глаза не мозолили, а кому-то хочется посмотреть во сколько начнётся ДОМ-2 (згинь нечистый), а на панели вдруг не окажется кнопочки канала ТНТ.

На счёт удалять/заменять в этом XML фале, который скачивается с сайта твгид программа на всю неделю т.ч. тут как раз оно подходит под 4-6п., а обновление файла происходит еженедельно на самом сайте и соответственно это можно реализовать и в программе - скачивание с сайта архива, распаковка файла в каталог и обновление данных в программе, но сначала нужно разобраться с парсингом.

РСС тоже, конечно тема интересная, но, предположим, что на компьютере на котором будут программу проверять на работу интернета не будет, как преподаватель проверит работоспособность? И кстати сейчас посмотрел на телегиде и на яндексе там нет возможности тянуть программу через рсс.

> Какая связь между выделенными фразами?

> PS. Т.к. ветка не в начинающим, рискну предложить нанять дизайнера и
> программиста.

Понимаешь, Плохиш...если бы у меня было бы времени на решение данной задачи пол года - год, я бы сюда с вопросом и не сунулся, а попробовал бы сам как-то разобраться, но у меня осталось всего 2 месяца до конца семестра и я вот что-то боюсь, что за это время я просто не успею т.к. мне ещё дохрена предметов нужно успеть сдать...я же не прошу за меня программу полностью написать, я прошу помочь, подсказать как 正确地 сделать, чтобы из того вида файла который я представил в СП вытащить то, что мне нужно, туда куда мне нужно... Блин, я уже сам почти написал всё по моему во втором своём посте, осталось переложить это всё на дельфятник...

Вот, попробовал в кнопку вывести название канала

XMLDocument1.LoadFromFile("C:\Users\Angel\Documents\Embarcadero\Studio\Pro jects\var4\tv\xmltv.xml\xmltv.xml");
XMLDocument1.Active := True;
SpeedButton1.Caption := VarToStr(XMLDocument1.DocumentElement.ChildValues["display-name"]);


если в файле присутствует такая строчка <!DOCTYPE tv SYSTEM "http://xmltv.cvs.sourceforge.net/viewvc/xmltv/xmltv/xmltv.dtd">
то дельфи выдаёт ошибку "dtd запрещен". Нашёл в интернете способы лечения, попробовал применить - не помогли. Если убрать эту строчку и нажать волшебную кнопочку [F9], то то делфа ВРОДЕ БЫ запускает приложение на выполнение, НО оно не появляется ещё минуты 2-3 наверное. Хотя так было пока я в настройках парсинга не включил первые 2 опции..сейчас уже минут 20 (если не больше0 уже прошло с момента как я запустил программу на выполнение и до сих пор тишина.

Такое чувство, что где-то что-то я делаю не так *задумался*



Плохиш ©   (2016-04-26 14:18) [10]


>
> Понимаешь, Плохиш...если бы у меня было бы времени на решение
> данной задачи пол года - год

Фигасе у тебя желаемые сроки 8-O

> сейчас уже минут 20 (если не больше0 уже прошло с момента
> как я запустил программу на выполнение и до сих пор тишина.

Ошибка в 17й строки, в общем-то.



sniknik ©   (2016-04-26 18:19) [11]

> сейчас уже минут 20
для проверок возьми xml поменьше... а несколько килобайт, а не мегабайт.
возможно парсер придется поменять, мелкосософкий весьма требователен к "биг-сайз". (хотя оно и не биг вообще то)

и правильнее будет
XMLDocument1.LoadFromFile("C:\Users\Angel\Documents\Embarcadero\Studio\Pro  jects\var4\tv\xmltv.xml\xmltv.xml");
SpeedButton1.Caption := XMLDocument1.DocumentElement.ChildValues[0].ChildValues["display-name"].Text;

у тебя пропущен тег channel.



sniknik ©   (2016-04-26 18:21) [12]

饼子
SpeedButton1.Caption := XMLDocument1.DocumentElement.ChildNodes[0].ChildNodes["display-name"].Text;/CODE>



Страницы: 1 整个分支

论坛:“初学者”;
当前存档:2018.04.29;
下载:[xml.tar.bz2];

楼上









内存:0.66 MB
时间:0.021 c
15-1472237941
andrd
2016-08-26 21:59
2018.04.29
成功的Embarcadero for Android示例


2-1461250553

2016-04-21 17:55
2018.04.29
XML问题


15-1472154273
谁会怀疑
2016-08-25 22:44
2018.04.29
Wai daz可能会受到伤害


15-1472290243
Ehot
2016-08-27 12:30
2018.04.29
Unicode版本


2-1461655310
Valya
2016-04-26 10:21
2018.04.29
DoubleBuffered





南非荷兰语 阿尔巴尼亚人 阿拉伯语 亚美尼亚 阿塞拜疆 巴斯克 白俄罗斯 保加利亚语 加泰罗尼亚 简体中文 中国(繁体) 克罗地亚 捷克 丹麦语 荷兰人 英语 爱沙尼亚语 菲律宾人 芬兰 法文
加利亚西语 格鲁吉亚语 德语 希腊语 海地克里奥尔语 希伯来语 印地语 匈牙利 北日耳曼语 印度尼西亚人 爱尔兰语 意大利语 日本性玩偶 韩语 拉脱维亚 立陶宛 马其顿 马来语 马耳他语 挪威语
波斯语 波兰语 葡萄牙语 罗马尼亚 俄语 塞尔维亚 斯洛伐克 斯洛文尼亚 西班牙语 斯瓦希里 瑞典语 泰国人 土耳其 乌克兰 乌尔都语 越南人 威尔士语 意第绪语 孟加拉 波斯尼亚
宿务 世界语 古吉拉特语 豪萨语 苗族 伊博 爪哇 卡纳达语 高棉 老挝 拉丁语 毛利 马拉 蒙古人 尼泊尔 旁遮普 索马里 泰米尔人 泰卢固语 约鲁巴语
祖鲁
英文 Французский Немецкий Итальянский Португальский 俄文 Испанский