【问题标题】:Why does my XML parser only returns one string, instead of multiple ones?为什么我的 XML 解析器只返回一个字符串,而不是多个?
【发布时间】:2011-08-14 16:05:33
【问题描述】:

我在解析 XML 数据时遇到了问题。我将我的程序分成 3 个不同的 java 文件,每个文件都包含一个类。其中之一是 rssparser.java。该文件包含一个名为iterateRSSFeed(String URL) 的函数,该函数返回一个包含已解析描述标记的字符串。在我的 main 方法所在的 main.java 文件中,我这样称呼这个 iterateRSSFeed 函数:

rssparser r = new rssparser();
String description = r.iterateRSSFeed();

然后我打算通过这种方式将此字符串添加到 JLabel 中:

JLabel news = new JLabel(description);

这显然效果很好,我的程序运行。但是我的 XML 文件中有更多描述标签,JLabel 仅包含一 (1) 个已解析的描述标签。我应该说我在 iterateRSSFeed 函数中的 return 语句被“打包”在一个 for 循环中,在我的脑海中应该返回所有的描述标签。但是没有。

请询问是否有不清楚的地方或显示源代码是为我的答案提供解决方案的更好方法。提前致谢! :)

【问题讨论】:

  • 你的 return 语句被“打包”在一个 for 循环中是什么意思?您是否考虑过返回 String 数组或 ArrayList
  • 您考虑过各种开源 RSS 库吗?科恩、罗马等?
  • 只是一个提示:当你有时间的时候,回到your old questions,看看他们之间是否有一些好的答案。如果是,请为每个接受最好的一个。如果不是,您可能需要编辑您的问题才能得到回答。
  • 不仅仅是一个提示:请接受您旧线程中的 一些 答案,否则您是在暗示它们都没有用你,那些回答他们的人只是在浪费他们的时间。

标签: java xml loops


【解决方案1】:

当Java执行return语句时,会离开方法,不再继续循环运行。

如果你想从一个方法返回多个值,你必须把它们放在某个对象中,将它们组合在一起。通常人们会使用List<String> 作为返回类型。

然后您的循环将填充列表,并且 return 语句(在循环之后)可以一次返回整个列表。

如果您想要一个大字符串而不是多个字符串,则必须将它们合并为一个。 最简单的方法是简单地使用列表中的.toString() 方法,这将提供(如果您使用默认列表实现)类似[element1, element2, element3] 的内容。

如果您不喜欢 [,],您可以简单地将它们连接起来:

List<String> list = r.iterateRSSFeed();
StringBuilder b = new StringBuilder();
for(String s : list) {
   b.append(s);
}
String description = b.toString();

这将给出element1element2element3

由于 Java 的 JLabel 具有一些基本的 HTML 支持,您还可以使用它来将列表格式化为列表:

List<String> list = r.iterateRSSFeed();
StringBuilder b = new StringBuilder();
b.append("<html><ul>");
for(String s : list) {
   b.append("<li>");
   b.append(s);
   b.append("</li>");
}
b.append("</ul>");
String description = b.toString();

结果将是&lt;html&gt;&lt;ul&gt;&lt;li&gt;element1&lt;/li&gt;&lt;li&gt;element2&lt;/li&gt;&lt;li&gt;element3&lt;/li&gt;&lt;/ul&gt;,JLabel 会将其格式化为:

  • 元素1
  • 元素2
  • 元素3

【讨论】:

  • 感谢您的回答保罗。但是如何将 List 添加到 JPanel?假设我的函数返回一个列表,并且我在我的 main 方法中设置了一个 List 来包含这个返回的列表?
  • 这取决于你真正想要什么。您可以将列表中的字符串合并为单个字符串,使用面板列表(这可能对 RSS 阅读器有意义)等。
  • 对不起,我不是指 JPanel,我指的是 JLabel。但是你能告诉我如何将列表中的字符串合并为单个字符串吗?
  • @opus:我在答案中添加了一个示例。
猜你喜欢
  • 1970-01-01
  • 2017-09-19
  • 1970-01-01
  • 2020-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-15
  • 1970-01-01
相关资源
最近更新 更多