трудности с использованием XML в Brightscript

Я очень неопытен как в использовании 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

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


person remington howell    schedule 21.06.2016    source источник


Ответы (1)


Убедитесь, что переменная xml_str не пуста и не недействительна, а функция GetXML работает нормально.

person Eugene Smoliy    schedule 21.06.2016
comment
похоже, что моя строка недействительна, вы правы. Спасибо за совет. Вопрос в том, почему это будет считаться недействительным? Нужно ли мне что-то инициализировать, чтобы оно стало действительным? - person remington howell; 21.06.2016
comment
Попробуйте отладить этот HTTP-запрос. Для упрощения можно использовать синхронный вызов: return link.getToString() вместо цикла. - person Eugene Smoliy; 21.06.2016
comment
ну, я стараюсь изо всех сил, но в данный момент я действительно понятия не имею, что делаю. Я, наверное, перейду к чему-нибудь другому. спасибо за вашу помощь в любом случае. - person remington howell; 21.06.2016