SAX Parser:从XML检索HTML标记
我有一个要解析的XML,如下所示
12941450184d2315fa63d6358242
status updated
标签包含HTML内容,其中包含我需要的数据。 我正在使用SAX Parser。 这就是我在做什么
private Timeline timeLine; //Object private String tempStr; public void characters(char[] ch, int start, int length) throws SAXException { tempStr = new String(ch, start, length); } public void endElement(String uri, String localName, String qName) throws SAXException { if (localName.equalsIgnoreCase("content")) { if (timeLine != null) { timeLine.setContent(tempStr); } }
这个逻辑会起作用吗? 如果不是,我应该如何使用SAX Parser从XML中提取嵌入的HTML数据。
你可以在所有html也是xml之后解析html。在stackoverflow中有一个类似于此的链接。你可以尝试这个如何使用SAX PARSER解析android中的html内容
在start元素上 ,如果元素是content,则应初始化临时Str缓冲区。 否则,如果内容已经启动,则捕获当前的start元素及其属性,并将其更新为temp Str缓冲区。
在字符上 ,如果内容已启动,请将字符添加到当前字符串缓冲区。
在end元素上,如果内容已启动,则捕获结束节点并添加到字符串缓冲区。
我的假设:
xml只有一个内容标记。
如果html实际上是xhtml,你可以使用SAX解析它并提取
标签的xhtml内容,但不是很容易。
您必须让您的处理程序实际响应将由
标记内的所有xhtml标记引发的事件,并构建类似于DOM结构的东西,然后您可以将其序列化为xml格式,或者-the-fly直接写入复制内容的xml字符串缓冲区。
如果你修改你的xml,以便内容标记内的html被包装在CDATA元素中,如在如何使用SAX PARSER解析android中的html内容中的建议,那么离你的代码不太远的东西确实应该有效。
但是你不能像在你做的那样将内容放入characters
方法中的String tempStr
变量中。 您需要有一个startElement
方法,该方法在查看
标记时初始化字符串的缓冲区,在characters
方法中收集到该缓冲区,并将结果放在endElement
中的
标记的某处。
我以这种方式找到解决方案:
注意:在这个解决方案中,我想获取
标签之间的html内容(
DefaultHandler handler = new DefaultHandler() { boolean chap = false; public char[] temp; int chapterStart; int chapterEnd; public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { System.out.println("Start Element :" + qName); if (qName.equalsIgnoreCase("chapter")) { chap = true; } } public void endElement(String uri, String localName, String qName) throws SAXException { if (qName.equalsIgnoreCase("chapter")) { System.out.println(new String(temp, chapterStart, chapterEnd-chapterStart)); } System.out.println("End Element :" + qName); } public void characters(char ch[], int start, int length) throws SAXException { if (chap) { temp = ch; chapterStart = start; chap = false; } chapterEnd = start + length; } };
更新:
我的代码有一个bug。 因为DocumentHandler中ch []的长度在不同情况下有所不同!