gpt4 book ai didi

java - SAX 解析器忽略 CDATA - html 标签

转载 作者:太空狗 更新时间:2023-10-29 16:25:12 34 4
gpt4 key购买 nike

我有一个简单的 Android RSS 阅读器应用程序,我在其中使用 SAX 解析器来获取数据。除“desc”元素外,所有记录都被正确提取。 XML 结构如下。

<item>
<title>Boilermaker Jazz Band</title>
<link>http://eventur.sis.pitt.edu/event.jsp?e_id=1805</link>
<type>Music Concerts</type>
<s_time>09-02-2010 05:00 PM&nbsp;</s_time>
<venue>Backstage Bar at Theater Square</venue>
<venue_addr/>
<desc>
<p><span style="font-family: arial, geneva, sans-serif; font-size: 11px;">
<p style="font-family: Arial, Helvetica, sans-serif; max-width: 600px; margin-top: 8px; margin-right: 0px; margin-bottom: 8px; margin-left: 0px; font-size: 9pt; vertical-align: top;">Authentic American Jazz, Ragtime and Swing The Boilermaker Jazz Band is an ecstatically fun band performing authentic hot jazz, ragtime, and swing. The group has ....</desc>

<img_link>
http://eventur.sis.pitt.edu/images/Boilheadshot1.jpg
</img_link>
</item>

所有字段的数据作为一个整体获取。但是说到<desc> , 'characters' 方法只获取 "<"并忽略其余部分。有人可以建议可以做什么。

最佳答案

你的 <desc>元素包含另一个(无效的)XML 结构。在您的示例中,startElement()将为 <p> 触发, 然后 <span> , 然后是另一个 <p> .如果你只想提取文本,你可以连接 characters() 的内容<desc> 的所有子项的方法返回直到您收到 <desc> 结束的通知带有 endElement() 的元素.

有点像

private boolean isDescStarted = false;

private StringBuilder textDesc = new StringBuilder();

public void startElement(String uri, String name, String qName, Attributes atts) {
if(name.equals("desc") {isDescStarted = true;}
}

public void endElement(String uri, String name, String qName) {
if(name.equals("desc") {
isDescStarted = false;
String fullTextDesc = textDesc.toString(); // do whatever you want with this string now
}
}

public void characters(char[] buf, int offset, int length) {
if (isDescStarted) {
textDesc.append(new String(buf, offset, length));
}
}

关于java - SAX 解析器忽略 CDATA - html 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3646317/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com