RSS 피드에서 데이터를 읽는 목표로 연습 응용 프로그램을 만들고 있습니다.자바 읽기 XML - '<'특수 문자에서 멈춤
내 응용 프로그램에 특수 문자 문제가 발생하는 것을 제외하고는 지금까지 잘 진행되었습니다. 노드 내의 첫 번째 특수 문자를 읽고 다음 노드로 이동합니다.
도움이 될만한 큰 코드 블록은 유감스럽게 생각합니다.
RSS 피드 - www.usu.co.nz/usu-news/rss.xml
<title>Unitec hosts American film students</title>
<link>http://www.usu.co.nz/node/4640</link>
<description><p>If you’ve been hearing American accents around the Mt Albert campus over the past week.</description>
디스플레이 코드
String xml = XMLFunctions.getXML();
Document doc = XMLFunctions.XMLfromString(xml);
NodeList nodes = doc.getElementsByTagName("item");
for (int i = 0; i < nodes.getLength(); i++)
{
Element e = (Element)nodes.item(i);
Log.v("XMLTest", XMLFunctions.getValue(e, "title"));
Log.v("XMLTest", XMLFunctions.getValue(e, "link"));
Log.v("XMLTest", XMLFunctions.getValue(e, "description"));
Log.v("XMLTest", XMLFunctions.getValue(e, "pubDate"));
Log.v("XMLTest", XMLFunctions.getValue(e, "dc:creator"));
}
리더 코드
public class XMLFunctions
{
public final static Document XMLfromString(String xml)
{
Document doc = null;
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder db = dbf.newDocumentBuilder();
InputSource is = new InputSource();
is.setCharacterStream(new StringReader(xml));
doc = db.parse(is);
} catch (ParserConfigurationException e) {
System.out.println("XML parse error: " + e.getMessage());
return null;
} catch (SAXException e) {
System.out.println("Wrong XML file structure: " + e.getMessage());
return null;
} catch (IOException e) {
System.out.println("I/O exeption: " + e.getMessage());
return null;
}
return doc;
}
/** Returns element value
* @param elem element (it is XML tag)
* @return Element value otherwise empty String
*/
public final static String getElementValue(Node elem) {
Node kid;
if(elem != null)
{
if (elem.hasChildNodes())
{
for(kid = elem.getFirstChild(); kid != null; kid = kid.getNextSibling())
{
if(kid.getNodeType() == Node.TEXT_NODE )
{
return kid.getNodeValue();
}
}
}
}
return "";
}
public static String getXML(){
String line = null;
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost("http://www.usu.co.nz/usu-news/rss.xml");
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
line = EntityUtils.toString(httpEntity);
} catch (UnsupportedEncodingException e) {
line = "<results status=\"error\"><msg>Can't connect to server</msg></results>";
} catch (MalformedURLException e) {
line = "<results status=\"error\"><msg>Can't connect to server</msg></results>";
} catch (IOException e) {
line = "<results status=\"error\"><msg>Can't connect to server</msg></results>";
}
return line;
}
public static int numResults(Document doc){
Node results = doc.getDocumentElement();
int res = -1;
try{
res = Integer.valueOf(results.getAttributes().getNamedItem("count").getNodeValue());
}catch(Exception e){
res = -1;
}
return res;
}
public static String getValue(Element item, String str) {
NodeList n = item.getElementsByTagName(str);
return XMLFunctions.getElementValue(n.item(0));
}
}
출력
Unitec hosts American film students
http://www.usu.co.nz/node/4640
<
Wed, 01 Aug 2012 05:43:22 +0000
Phillipa
답변이 없으므로 상위 XML API를 사용하여 이러한 항목을 읽으셨습니까? Apache [XMLBeans] (http://xmlbeans.apache.org/)와 같은 라이브러리를 사용하면 XML을 편리한 Java 객체로 쉽게 파싱 할 수 있습니다. "재미있는"캐릭터 및 기타 이상한 점에 대해서도 잘 테스트됩니다. –