Java 使用SAX解析器解析自动关闭的XML标记时出现问题
我在使用SAX解析自动关闭的XML标记时遇到问题。我正在尝试从GoogleBaseAPI中提取链接标签。我在解析常规标签方面取得了合理的成功 下面是xml的一个片段Java 使用SAX解析器解析自动关闭的XML标记时出现问题,java,sax,Java,Sax,我在使用SAX解析自动关闭的XML标记时遇到问题。我正在尝试从GoogleBaseAPI中提取链接标签。我在解析常规标签方面取得了合理的成功 下面是xml的一个片段 <entry> <id>http://www.google.com/base/feeds/snippets/15802191394735287303</id> <published>2010-04-05T11:00:00.000Z</published> <
<entry>
<id>http://www.google.com/base/feeds/snippets/15802191394735287303</id>
<published>2010-04-05T11:00:00.000Z</published>
<updated>2010-04-24T19:00:07.000Z</updated>
<category scheme='http://base.google.com/categories/itemtypes' term='Products'/>
<title type='text'>En-el1 Li-ion Battery+charger For Nikon Digital Camera</title>
<link rel='alternate' type='text/html' href='http://rover.ebay.com/rover/1/711-67261-24966-0/2?ipn=psmain&icep_vectorid=263602&kwid=1&mtid=691&crlp=1_263602&icep_item_id=170468125748&itemid=170468125748'/>
.
.
xmltags的声明
private Stack<String> xmlTags = new Stack<String>();
characters
所做的是在XML元素标记之间传递内容(分块,每个方法调用一个块)。所以
如果您有一个XML元素,如
<Foo someattrib=“” />
然后就不会调用字符
,因为那里没有解析器可以告诉您的内容
如果您依赖于您的characters方法,即使标记为空,也必须在此处调用它,那么您就做错了
characters方法将元素文本添加到缓冲区,但是startElement和endElement需要负责清除和读取缓冲区,因为endElement是您知道已接收到所有元素文本的位置。如果没有可读取的内容,则不调用字符应该是可以的
因为您可能还没有在任何一个字符调用中包含所有内容,所以该方法中不能有任何业务逻辑。如果有,那么您的代码在某个时候将无法工作
有关如何实现字符,请参见。如果要读取属性值,请参阅 您应该确保所有的块代码都缩进了四个空格(这次我为您编辑了)。这也适用于xml示例?这两个方法都没有被调用,还是只有一个?请记住!只有start元素被称为.oh BTW。。谢谢你的格式化!我不能复制。有人找我。添加日志记录。你能想出如何解析它吗?我在解析同一类型的xml文档时遇到了同样的困难。@Rudy:添加了更多解释,并链接到了我编写的其他答案中的示例。
public void characters(char[] ch, int start, int length) throws SAXException
{
if (insideEntryTitle)
{
String url= new String(ch, start, length);
System.out.println("url="+title);
i++;
}
}
<Foo someattrib=“” />