Я очень неопытен как в использовании Brightscript, так и в работе с XML-контентом, но в настоящее время мне приходится делать и то, и другое для разработки приложения roku. На данный момент мне нужно выяснить, как отсортировать некоторый XML из онлайн-документа, чтобы получить некоторые необходимые данные. Любой совет будет принят во внимание.
вот как выглядит XML-документ. (в узлах MediaModel существует больше элементов, но я не думаю, что они мне нужны.)
<ArrayOfMediaModel xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/BlueBridgeIntegration.Models">
<MediaModel>
<Archive_ID>...</Archive_ID>
<Archive_Title>...</Archive_Title>
<Description>...</Description>
<Image_Path>...</Image_Path>
<MP3>...</MP3>
<MP4>...</MP4>
<RTMP_Path>...</RTMP_Path>
<Series_ID>...</Series_ID>
<Title>...</Title>
</MediaModel>
<MediaModel>...</MediaModel>
<MediaModel>...</MediaModel>
...
<MediaModel>...</MediaModel>
</ArrayOfMediaModel>
Вкратце, это объем документа. Наиболее важные элементы информации, которые мне нужно извлечь из XML, - это заголовок, описание, изображение и файл mp4.
В своем текущем состоянии код, который у меня есть, делает немного больше, чем анализирует содержимое XML, но это то, что у меня есть до сих пор.
sub CreateRecentMenu()
screen = CreateObject("roGridScreen")
port = CreateObject("roMessagePort")
xml = CreateObject("roXMLElement")
xml_str = GetXML("[url to the XML document]")
xml.Parse(xml_str)
...
return
end sub
До сих пор мои попытки получить нужную мне информацию из документа доказали, что я нарушаю программу. Опять же, мы очень ценим любой совет. Спасибо.
ИЗМЕНИТЬ: мне удалось определить, что строка xml_str является недопустимой, по какой причине я не уверен. Это код, который у меня есть для получения XML-кода в виде строки.
Function GetXML(url as String) as string
data = ""
port = CreateObject("roMessagePort")
link = CreateObject("roUrlTransfer")
link.setPort(port)
link.setUrl(url)
link.SetCertificatesFile ("common:/certs/ca-bundle.crt")
link.InitClientCertificates ()
if(link.AsyncGetToString())
finished = False
while not finished
msg = wait(0, port)
if msg = invalid
finished = True
print "failure to connect"
link.AsyncCancel()
else
if type(msg) = "roUrlEvent"
finished = True
if msg.GetInt() = 1
response = msg.GetResponseCode()
if response <> 200
print response
else
data = msg.GetString()
end if
end if
else
return invalid
end if
end if
end while
end if
return data
End Function
Пока что это единственный способ заставить соединение работать. Опять же, любая помощь приветствуется.