Java Nasa Rss提要Sax解析错误

Java Nasa Rss提要Sax解析错误,java,xml,rss,sax,saxparser,Java,Xml,Rss,Sax,Saxparser,我正试图编写一个java程序来读取NASA的Rss提要。代码可以工作,但当代码遇到的符号时,它不会读取整行内容。 例如,“美国宇航局的一项新研究发现,2002年部分崩塌的南极洲拉森B冰架的最后一个剩余部分正在迅速减弱,并可能在本世纪末之前完全解体”。 在上面这一行中,代码不会读取Antartica之后的整行内容。 代码有什么问题???我如何修复它??? 没有';s符号代码工作正常。 指向提要的链接:“ }我终于找到了问题的答案 链接:“ 链接:“ commons apache lang

我正试图编写一个java程序来读取NASA的Rss提要。代码可以工作,但当代码遇到的符号时,它不会读取整行内容。 例如,“美国宇航局的一项新研究发现,2002年部分崩塌的南极洲拉森B冰架的最后一个剩余部分正在迅速减弱,并可能在本世纪末之前完全解体”。 在上面这一行中,代码不会读取Antartica之后的整行内容。 代码有什么问题???我如何修复它??? 没有';s符号代码工作正常。 指向提要的链接:“


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

链接:“ 链接:“


commons apache lang StringEscapeUitls库包含一个名为UneScapeThml4的方法。它删除带有的html编码字符,如'等以及其他等效字符。只需将URL inputstream转换为字符串,并使用UneScapeThml14函数转换为字符串,从中提取inputstream,然后使用inputstream作为参数。感谢@duffymo通知我有关“神奇字符”的信息。

您必须确保正确使用XML编码和解码。如果处理不当,单引号是破坏XML的五个“神奇字符”之一:与符号、小于、大于和双引号是其他字符。请您告诉我如何处理它。我对这种解析非常陌生。请给出与此无关的变量名。例如,
string
string1
string2
应更改为更具描述性的内容。感谢您的建议。实际上我使用netbeans,不更改函数中自动生成的变量。
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;
    }
}