我在使用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
到目前为止,这是我能够使连接工作的唯一方法。再次,任何帮助表示赞赏。
答案 0 :(得分:1)
确保 xml_str 变量不为空或无效且 GetXML 功能正常运行。