Я очень неопытен в использовании Brightscript и работе с XML-контентом, но в настоящее время мне бросают вызов сделать так, чтобы разработать приложение roku. На данный момент мне нужно выяснить, как отсортировать XML-код из онлайн-документа, чтобы получить некоторые необходимые данные. Любой совет будет принят во внимание.трудности с использованием XML в Brightscript
Вот как выглядит документ 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
До сих пор мои попытки получить информацию, которая мне нужна из документа, доказали, что программа нарушает работу. Опять же, любой совет очень ценится. Спасибо.
EDIT: Я смог определить, что строка 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
До сих пор это был единственный способ, с помощью которого я смог установить соединение. Опять же, любая помощь приветствуется.
похоже, что моя строка неверна, вы правы. Спасибо за этот совет. Вопрос в том, почему он считается недействительным? Должен ли я инициализировать что-то, чтобы сделать его действительным? –
Попробуйте отладить этот HTTP-запрос. Для упрощения вы можете использовать синхронный вызов: 'return link.getToString()' вместо цикла. –
хорошо, я стараюсь изо всех сил, но на данный момент я действительно не знаю, что я делаю. я, вероятно, собираюсь перейти к чему-то еще. благодарю вас за вашу помощь независимо. –