【问题标题】:Nasa Rss feed Sax parsing errorNasa Rss feed Sax 解析错误
【发布时间】:2015-05-26 20:25:49
【问题描述】:

我正在尝试编写一个用于读取 NASA Rss 提要的 Java 程序。代码可以工作,但是当代码遇到 's 符号时,它不会读取整行。 例如——“美国宇航局的一项新研究发现,2002 年部分坍塌的南极洲拉森 B 冰架的最后剩余部分正在迅速减弱,并可能在本世纪末之前完全解体”。 在上面这一行中,代码不会读取 Antartica 之后的整行。 代码有什么问题???我该如何解决??? 如果没有 ' ;s 符号,代码可以正常工作。 提要的链接:“http://www.nasa.gov/rss/dyn/earth.rss

package xmlparseprac;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class Handler extends DefaultHandler {
boolean mtitle=false;
boolean mdescription=false;
boolean mitem;

@Override
public void startDocument() throws SAXException {
    super.startDocument(); 
    System.out.println("Starting...");
}

@Override
public void endDocument() throws SAXException {
    super.endDocument(); 
    System.out.println("Ending...");
}

@Override
public void startElement(String string, String string1, String string2, Attributes atrbts) throws SAXException {
    super.startElement(string, string1, string2, atrbts); 
    if(string2.equalsIgnoreCase("item")){mitem=true;}
    if(string2.equalsIgnoreCase("title")){mtitle=true;}
    if(string2.equalsIgnoreCase("description")){mdescription=true;}
}

@Override
public void endElement(String string, String string1, String string2) throws SAXException {
    super.endElement(string, string1, string2);
    if(string2.equalsIgnoreCase("item")){mitem=false;}
    if(string2.equalsIgnoreCase("title")){mtitle=false;}
    if(string2.equalsIgnoreCase("description")){mdescription=false;}
}

@Override
public void characters(char[] chars, int i, int i1) throws SAXException {
    super.characters(chars, i, i1);
    if(mtitle==true && mitem==true){
        String s=new String(chars, i, i1);
        System.out.println("Title:"+s);
        mtitle=false;}
    if(mdescription==true && mitem==true){
        String s=new String(chars, i, i1);
        System.out.println("Description:"+s);
        mdescription=false;
    }
}

}

【问题讨论】:

  • 您必须确保正确使用 XML 编码和解码。如果处理不当,单引号是破坏 XML 的五个“神奇字符”之一:与号、小于、大于和双引号是其他符号。
  • 请你告诉我如何处理它。我对这个解析东西很陌生。
  • 在不相关的说明中,请给您的变量提供合理的名称。 IE。 stringstring1string2 应更改为更具描述性的内容。
  • 感谢您的建议。实际上我使用的是netbeans,我不会更改函数中自动生成的变量。

标签: java xml rss sax saxparser


【解决方案1】:

我终于找到了我的问题的答案。

链接:“http://www.javaexperience.com/strip-invalid-characters-from-xml/” 链接:“https://commons.apache.org/proper/commons-lang/javadocs/api-3.1/org/apache/commons/lang3/StringEscapeUtils.html

commons apache-lang-StringEscapeUitls 库包含一个名为 unescapeHtml4 的方法。它使用 's 和其他等效字符删除 html 编码字符,如 ' 等。只需将 URL 输入流转换为字符串并使用 unescapeHtml14 函数字符串并从中提取输入流,并以输入流作为参数调用解析函数。感谢@duffymo 告诉我有关“魔术字符”的信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-23
    • 2011-03-11
    • 1970-01-01
    • 2013-12-05
    • 2015-02-15
    • 1970-01-01
    相关资源
    最近更新 更多