【问题标题】:How to parse xml with HTML tags in between android如何在android之间解析带有HTML标签的xml
【发布时间】:2012-02-28 00:50:20
【问题描述】:

嗨,朋友们,我有一个包含大量内容的 xml 文件,我可以通过拉式解析来解析内容,但问题是标签之间存在 html 链接,而在解析时,我只能在 html 链接之后获得文本。链接前的文字丢失了

因为我有一个标签

 <table> this is my text before html <a href="i got a link here">link</a> this is my text after link. 
 </table>

在这里我得到输出中链接后的文本,如何克服这个...提前谢谢

【问题讨论】:

  • regexp,substring...indexOf("href")....... ?
  • 如果您正在解析 HTML(就像在“野外”中遇到的那样),我建议您尝试 JSoup 之类的东西 - 人们对 HTML 的虐待比对红发继子的虐待更多。

标签: android xml-parsing html-parsing


【解决方案1】:

使用

XmlPullParser parser =...;
...
parser.getAttributeValue(null, "href");

用于获取属性。当然,你不能把它们当作Text或Tag

【讨论】:

    【解决方案2】:

    方法之一:

    String a = "<table> this is my text before html <a href=\"http://stackoverflow.com/questions/9161924/how-to-parse-xml-with-html-tags-in-between-android\">link</a> this is my text after link.  </table>";
    String link = a.substring(a.indexOf("href=\"")+6,a.indexOf("\">"));
    System.out.println(link);
    

    希望对你有帮助。

    【讨论】:

    • 他没有通过正则表达式或查找来读取该行。他使用 XmlPullParser 并且无法读取属性。
    • 我不太确定。我知道他的值来自已经从 XML 中检索到的文本。
    • 我认为,如果他真的将finding/regexp和xmlPullParsing混合在一起,最好全部重写。
    【解决方案3】:

    对我有用,因此您必须展示更多内容 - 例如,您用于解析 XML 的代码,或来自原始 XML 文档的真实 sn-p - 以便我们提供更多帮助。

    同时,这里有一个快速演示/示例,我运行它来看看事情是如何工作的。我在名为DOCUMENT 的固定String 中有一个XML 文档,其中包含以下内容:

    <root>
      <element>
        <table>text before <a href="url">link</a> text after</table>
      </element>
      <element>
        free text
      </element>
    </root>
    

    一个非常简单的循环负责解析该文档并在日志中显示解析器能够为每个元素提取的文本:

    XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
    XmlPullParser xpp = factory.newPullParser();
    xpp.setInput(new StringReader(DOCUMENT));
    int eventType = xpp.getEventType();
    while (eventType != XmlPullParser.END_DOCUMENT) {
        if (eventType == XmlPullParser.START_DOCUMENT) {
            Log.d("XmlDemo", "Start document");
        } else if (eventType == XmlPullParser.START_TAG) {
            Log.d("XmlDemo", "Start tag: " + xpp.getName());
        } else if (eventType == XmlPullParser.END_TAG) {
            Log.d("XmlDemo", "End tag: " + xpp.getName());
        } else if (eventType == XmlPullParser.TEXT) {
            Log.d("XmlDemo", "Text: " + xpp.getText());
        }
        eventType = xpp.next();
    }
    Log.d("XmlDemo", "End document");
    

    然后,在运行时,日志会显示(以及其他)以下条目:

    02-06 15:45:38.981: D/XmlDemo(371): Start tag: table
    02-06 15:45:39.001: D/XmlDemo(371): Text: text before 
    02-06 15:45:39.001: D/XmlDemo(371): Start tag: a
    02-06 15:45:39.021: D/XmlDemo(371): Text: link
    02-06 15:45:39.021: D/XmlDemo(371): End tag: a
    02-06 15:45:39.041: D/XmlDemo(371): Text:  text after
    02-06 15:45:39.041: D/XmlDemo(371): End tag: table
    

    如您所见,解析器能够提取链接前后的文本,尽管不是在一次操作中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-16
      • 1970-01-01
      • 1970-01-01
      • 2016-06-03
      • 2012-07-22
      • 2023-03-26
      • 2013-03-16
      • 1970-01-01
      相关资源
      最近更新 更多