我在使用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
到目前为止,我从文档中获得所需信息的尝试已证明是违反程序的。同样,任何建议都非常感谢。谢谢。
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
到目前为止,这是我能够使连接起作用的唯一方法。同样,任何帮助都将受到赞赏。
确保 xml_str 变量不是空的或无效的, getxml 函数函数效果很好。