Nasa Rss 提要 Sax 解析错误
Nasa Rss feed Sax parsing error
我正在尝试编写一个 java 程序来读取 NASA Rss feed.The 代码有效,但是当代码遇到 的符号时,它不会读取整行。
例如-"A new NASA study finds the last remaining section of Antarctica' ;s Larsen B Ice Shelf, which partially collapsed in 2002, is quickly weakening and likely to disintegrate completely before the end of the decade"。
在上面这一行中,代码不会读取 Antartica 之后的整行。
代码有什么问题???我该如何解决???
没有 ' ;s 符号代码工作正常。
link 到提要:"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;
}
}
}
我终于找到了问题的答案。
link:"http://www.javaexperience.com/strip-invalid-characters-from-xml/"
link:"https://commons.apache.org/proper/commons-lang/javadocs/api-3.1/org/apache/commons/lang3/StringEscapeUtils.html"
commons apache-lang-StringEscapeUitls 库包含一个名为 unescapeHtml4 的方法。它删除了 html 编码字符,如 ' 等和其他等效 characters.Just 转换 URL inputstream 到字符串并使用 unescapeHtml14 函数到字符串并从中提取输入流并使用输入流调用解析函数作为 parameter.Thanks @duffymo 通知我关于 "magic characters".
我正在尝试编写一个 java 程序来读取 NASA Rss feed.The 代码有效,但是当代码遇到 的符号时,它不会读取整行。 例如-"A new NASA study finds the last remaining section of Antarctica' ;s Larsen B Ice Shelf, which partially collapsed in 2002, is quickly weakening and likely to disintegrate completely before the end of the decade"。 在上面这一行中,代码不会读取 Antartica 之后的整行。 代码有什么问题???我该如何解决??? 没有 ' ;s 符号代码工作正常。 link 到提要:"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;
}
}
}
我终于找到了问题的答案。
link:"http://www.javaexperience.com/strip-invalid-characters-from-xml/" link:"https://commons.apache.org/proper/commons-lang/javadocs/api-3.1/org/apache/commons/lang3/StringEscapeUtils.html"
commons apache-lang-StringEscapeUitls 库包含一个名为 unescapeHtml4 的方法。它删除了 html 编码字符,如 ' 等和其他等效 characters.Just 转换 URL inputstream 到字符串并使用 unescapeHtml14 函数到字符串并从中提取输入流并使用输入流调用解析函数作为 parameter.Thanks @duffymo 通知我关于 "magic characters".