ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java-使用SAX解析器解析自关闭XML标签很麻烦

2019-10-11 03:04:46  阅读:253  来源: 互联网

标签:sax java


我在使用SAX解析自关闭XML标记时遇到麻烦.我正在尝试从Google Base API中提取链接标记.我在解析常规标记方面取得了合理的成功.

这是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'/>
.
.

等等

我可以解析更新和已发布标签,但不能解析链接和类别标签.

这是我的startElement和endElement覆盖

public void startElement(String uri, String localName, String qName,
     Attributes attributes) throws SAXException {
     if (qName.equals("title") && xmlTags.peek().equals("entry")) {

     insideEntryTitle = true;

   } 
   xmlTags.push(qName);

 }

public void endElement(String uri, String localName, String qName)
     throws SAXException {
   // If a "title" element is closed, we start a new line, to prepare
   // printing the new title.

   xmlTags.pop();
   if (insideEntryTitle) {
     insideEntryTitle = false;
  System.out.println();
   }
 }

xmltags的声明.

private Stack<String> xmlTags = new Stack<String>(); 

有帮助吗?

这是我在这里的第一篇文章.我希望我遵守发布规则!谢谢你们.

纠正:endElement被调用.字符没有.

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++;
    }
}

解决方法:

字符的作用是在XML元素标签之间传递内容(以块为单位,每个方法调用一个块).所以
如果您有一个XML元素,例如

<Foo someattrib=“” />

字符就不会被调用,因为解析器没有内容可以告诉您.

如果您依赖于字符方法,即使标记为空,也必须在此处调用它,那么您做错了.

字符方法将元素文本添加到缓冲区中,但是startElement和endElement需要负责清除和读取缓冲区,因为endElement是您知道已收到所有元素文本的地方.如果没有要阅读的字符,则不调用字符应该没问题.

因为您可能还没有任何一个字符调用包含所有内容,所以该方法中不能包含任何业务逻辑.如果有,那么您的代码有时将无法工作.

有关如何实现字符的信息,请参见this example.如果要读取属性值,请参见this example.

标签:sax,java
来源: https://codeday.me/bug/20191011/1889477.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有