我有一个网址和端口... mysite.com:8000
当HTTP接近时,返回XML,我需要在树<title>
<source mount="/live">
还有其他节点,但层次结构看起来像这样
<icestats>
<source mount="/live">
<title>Michael Jackson - Beat IT - Thriller</title>
</source>
</icestats>
我需要使用Pascal提取<title>
的值,然后使用第一个连字符将其展开。
因此,如果XML具有“Michael Jackson - Beat IT - Thriller”的价值,我需要输出......
艺术家=迈克尔杰克逊 song = Beat IT - Thriller
这些需要作为变量提取,以包含在脚本的单独部分中。
我道歉,我还没有尝试过。我是一名学习编码的电台程序员。如果有人能给我一个良好的开端,我可能会把它充实。
我在PAL中编译它,它基于Pascal / Delphi并在SAM Broadcaster中运行。
答案 0 :(得分:1)
我不确定SAM或PAL是什么,以及他们是否可以使用Delphi提供的所有底层技术。
所以我将从Delphi的角度回答这个问题。
您的问题分为两部分:
对于第二部分,请使用XML data binding wizard。一个很好的视频展示了here。这取决于MSXML DOM。如果你没有这个,你将不得不找到一个XML库或自己进行XML解析(这可能非常棘手)。
对于第一部分,我将使用Indy TIdHttp组件,例如以这里询问的方式:How can I download a huge file via TIdHTTP?
如果XML是关于解释Icecast / Shoutcast歌曲信息,那么格式在很大程度上取决于流媒体服务器的配置方式(参见http://wiert.me/2010/11/22/streaming-your-mp3-collection-through-an-icecast-server-using-ezstream/)。
关于icecast和shoutcast的一个很酷的事情是你可以流式传输它,并且icecast服务器将确定如何表示歌曲信息,因此你向流服务器提供流的实际设备不必担心(我一直在流媒体方面。)
答案 1 :(得分:0)
我最终能够很简单地解决这个问题。首先,我通过向服务器添加自定义XSLT文件来修改原始XML输出,在这种情况下,它是一个Icecast服务器。将它放在Web文件夹中很简单,但您确实需要访问它。
以下是我用来提取我需要的三个标签的内容。请注意,这是完整的示例,而不是上面的简化示例。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:value-of select="/icestats/source[@mount='/live']/title" />
<xsl:text>
</xsl:text>
<xsl:value-of select="/icestats/source[@mount='/live']/genre" />
<xsl:text>
</xsl:text>
<xsl:value-of select="/icestats/source[@mount='/live']/server_name" />
</xsl:template>
</xsl:stylesheet>
<!-- Do not change the formatting or spacing in this document. It will affect the output and could break processes down the chain -->
然后我只使用delphi(PAL脚本,SAM广播公司中基于delphi的shell)WebtoFile
来创建一个本地文本文件,TStringList
用于存储和解析文本文件到我需要的变量它们。
“ - ”爆炸是通过pos
和delete
命令的组合实现的。
完整的工作脚本包含大量错误处理,并且太大而无法在此处粘贴。那个,讨论(进一步的背景)可以找到here