解析要与iPhone应用程序一起使用的HTML内容

解析要与iPhone应用程序一起使用的HTML内容,iphone,asp.net,html,objective-c,xml-parsing,Iphone,Asp.net,Html,Objective C,Xml Parsing,我甚至不知道这个问题的标题是否合适,因为我真的迷路了,需要一些建议,一个我需要完成的起点 我的iPhone应用程序使用我定制的播放器播放来自互联网的音频流。一些链接是Akamai的实时流,其他链接是存储在网站上的音频文件。我对直播流没问题,但我的问题是音频文件 因为我有许多存储的音频文件,用户可以选择不同的语言,我不想在我的应用程序中硬编码所有这些文件。然后,我需要一种聪明的方法,让用户浏览应用程序(从互联网推送信息),直到他到达想要播放的文件 网站的组织结构如下: programs = (

我甚至不知道这个问题的标题是否合适,因为我真的迷路了,需要一些建议,一个我需要完成的起点

我的iPhone应用程序使用我定制的播放器播放来自互联网的音频流。一些链接是Akamai的实时流,其他链接是存储在网站上的音频文件。我对直播流没问题,但我的问题是音频文件

因为我有许多存储的音频文件,用户可以选择不同的语言,我不想在我的应用程序中硬编码所有这些文件。然后,我需要一种聪明的方法,让用户浏览应用程序(从互联网推送信息),直到他到达想要播放的文件

网站的组织结构如下:

programs = (
  {
    program_name: "Foo";
    tracks = (
      { day: Monday;
        track: audio_file1.mp3;
      },
      { day: Tuesday;
        track: audio_file2.mp3;
      },
      { day: Wednesday;
        track: audio_file3.mp3;
      }
    );
  },
  {
    program_name: "Bar";
    tracks = (
      { day: Monday;
        track: audio_file4.mp3;
      },
      { day: Tuesday;
        track: audio_file5.mp3;
      },
      { day: Wednesday;
        track: audio_file6.mp3;
      }
    );
  },
  {
    program_name: "Baz";
    tracks = (
      { day: Monday;
        track: audio_file7.mp3;
      },
      { day: Tuesday;
        track: audio_file8.mp3;
      },
      { day: Wednesday;
        track: audio_file9.mp3;
      }
    );
  };
);
首先是列表,列出所有可用的程序。用户选择所需的节目,然后显示另一个页面,他必须选择一周中的某一天播放

我的问题是:我如何解析这些内容,以及可以选择的程序和工作日?我应该研究HTML解析吗?有没有更好/更简单的方法,比如在网站上创建XML文件

如果这有帮助,则所有网页都以.aspx扩展名结尾


请,任何来自更有经验的程序员的建议都会对我大有帮助。谢谢大家!

如果网站内容是静态的,我会将文件名和适当的URL硬编码到应用程序中的服务器,并让用户滚动浏览可用项目列表

如果网站内容发生变化,那么我会在服务器上创建一个XML文件,你的应用程序在启动时(或你认为合适的时候)下载该文件,并在应用程序中进行解析,然后根据静态内容继续


希望这能让你朝着正确的方向开始。

如果是我,并且假设我对你所说的有一些线索,我会有一个数据库来显示音频内容和日期之间的关系。然后,内容的微调器将通过查询进行更新

例如,假设一个表

+----------------------------------------------------------------------+
| Filename                        | Language          | Date           |
+----------------------------------------------------------------------+
| kjslfiewofksalfjslfakj          | Swahili           | 2011-11-01     |
| shfaahflajfewifhlanfww          | Guyanese          | 2011-10-08     |
| weijalfjlajfljalsfjewn          | French            | 2011-11-01     |
| fiwojancanlsjfhkwehwlk          | Swahili           | 2011-11-01     |
| fhalksflwiehlfnaksflhw          | Swahili           | 2011-11-03     |
+----------------------------------------------------------------------+
好的,如果joe schmo到达2011-11-01的节目页面,并且他的语言是斯瓦希里语,那么将返回两行:

+----------------------------------------------------------------------+
| Filename                        | Language          | Date           |
+----------------------------------------------------------------------+
| kjslfiewofksalfjslfakj          | Swahili           | 2011-11-01     |
| fiwojancanlsjfhkwehwlk          | Swahili           | 2011-11-01     |
+----------------------------------------------------------------------+
您还可以轻松添加指示Akamai记录的日期和语言的引用。这对我来说并不复杂,但对你来说可能意味着重大的重新设计。然而,你在细节上故意含糊其辞,所以希望至少这能为你指明正确的方向

编辑

好的,在重读之后,可能有一种相对简单的方法通过使用目录结构来控制组织中的内容,但它比我建议的表要落后

据我所知,可能有三个类别在起作用:程序日期,和语言

如果创建文件结构(假定为根):

/public\u html/audio/[date]/[language]/[program\u name].mp4

然后,当用户选择日期和语言时,我们可能会:

/public\u html/audio/2011-11-14/swahili/the\u linux\u show.mp4


然后,我们所要做的就是读取选择器中的
$\u POST
数据以提供显示。。。不幸的是,这意味着我们必须知道节目播出的日期,然后是语言,然后是节目名称。这将是一种比数据库糟糕得多的方法,但可以做到。使用ASP读取目录内容,您可以使用循环进行列表。看起来很简单,但一点也不优雅。

我认为解析HTML不是这里最好的实现。找一个没有可视标记的结构化源代码来担心解析或完全忽略(这也意味着解析标记时投入的资源更少,因为您将只解析重要的内容)

我建议使用可以转换为NSDictionary或其他数据结构以供应用程序使用的XML或JSON源。下面是一个简洁的小类,它将XML源转换为NSDictionary:

TBXML是Objective-C的另一种轻量级XML解析器,它使实现自定义数据对象取决于您:

如果您更愿意使用JSON,那么有很多帮助者。一个开始寻找的好地方是:

如果我正确理解了您的问题,无论您选择什么来源,您都可能希望得到一个类似以下内容的dictionary对象:

programs = (
  {
    program_name: "Foo";
    tracks = (
      { day: Monday;
        track: audio_file1.mp3;
      },
      { day: Tuesday;
        track: audio_file2.mp3;
      },
      { day: Wednesday;
        track: audio_file3.mp3;
      }
    );
  },
  {
    program_name: "Bar";
    tracks = (
      { day: Monday;
        track: audio_file4.mp3;
      },
      { day: Tuesday;
        track: audio_file5.mp3;
      },
      { day: Wednesday;
        track: audio_file6.mp3;
      }
    );
  },
  {
    program_name: "Baz";
    tracks = (
      { day: Monday;
        track: audio_file7.mp3;
      },
      { day: Tuesday;
        track: audio_file8.mp3;
      },
      { day: Wednesday;
        track: audio_file9.mp3;
      }
    );
  };
);

一旦计算出数据源并将其转换为本机数据对象以便在Obj-C中使用,您应该能够继续编写UI,该UI可以遍历字典以提供程序列表,反过来,每个节目的播放天数列表,附带可选择播放的音频文件。

我也有类似的需要。正在使用ASP.NET站点中的数据。最后,我从.NET端使用JSON并返回JSON。然后,我使用来自Google的代码将返回的JSON转换为NSDictionary。从那以后,剩下的就是历史了

如果您使用的是.NETMVC,那么在控制器中返回JSON结果非常简单。既然您有aspx扩展,我想情况并非如此。主页底部列出了大量用于C的JSON解析器。

跳出框框思考:使用UIWebView 与其考虑如何解析数据,然后编写UI代码来显示数据,不如考虑更大的问题:我们希望向iPhone用户展示一系列屏幕,以选择和播放录音,而这应该来自web服务器。只要有这样一个工具。。。但是等等,有!它被称为web浏览器,以UIWebView的形式,您可以将其集成到界面中,只需稍加修改

首先,添加UIWebView非常简单,请查看此示例

假设我们添加了web视图,用户可以从中选择音频文件,然后会发生什么?事实证明你可以告诉它w