Java 使用SAX解析器解析自动关闭的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> <

我在使用SAX解析自动关闭的XML标记时遇到问题。我正在尝试从GoogleBaseAPI中提取链接标签。我在解析常规标签方面取得了合理的成功

下面是xml的一个片段

<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&amp;icep_vectorid=263602&amp;kwid=1&amp;mtid=691&amp;crlp=1_263602&amp;icep_item_id=170468125748&amp;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=“” />