У меня есть синтаксический анализатор xml, который отлично работает, когда я загружаю его из файла:
private void getParsedXML(int id, Context context) throws Exception {
/* Get a SAXParser from the SAXPArserFactory. */
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
/* Get the XMLReader of the SAXParser we created. */
XMLReader xr = sp.getXMLReader();
/* Create a new ContentHandler and apply it to the XML-Reader */
XMLHandlerLevel myExampleHandler = new XMLHandlerLevel();
xr.setContentHandler(myExampleHandler);
/* Load xml file from raw folder*/
InputStream in = context.getResources().openRawResource(id);
/* Begin parsing */
xr.parse(new InputSource(in));
this.levelData = myExampleHandler.getLevelData();
in.close();
}
Но теперь я также получаю somme content из сервера. Затем XML отправляется как String, и здесь он блокируется:
private void getParsedXML(String s) throws Exception{
if(this.levelData == null){
InputStream in = StringToStream(s);
/* Get a SAXParser from the SAXPArserFactory. */
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLHandlerLevel myExampleHandler = new XMLHandlerLevel();
XMLReader xr = sp.getXMLReader();
/* Begin parsing */
xr.parse(new InputSource(in));
this.levelData = myExampleHandler.getLevelData();
Log.e("jason",(levelData!=null)?levelData.toString():null);
in.close();
}
}
и вот функция StringToString
public static InputStream StringToStream(String text) {
InputStream is = null;
/*
* Convert String to InputStream using ByteArrayInputStream
* class. This class constructor takes the string byte array
* which can be done by calling the getBytes() method.
*/
try {
is = new ByteArrayInputStream(text.getBytes("UTF-8"));
is.reset();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (Exception e){
Log.e("jason","failed again");
}
return is;
}
Но это не сработает...
Я уверен в содержании строки. и я протестировал функцию StringToStream, она отлично работает.
Я также поместил журналы в XMLHandlerLevel, чтобы проверить, что происходит, и НИЧЕГО не запускать функцию startDocument(), но я не получаю сообщение об ошибке без исключений, поэтому я полностью потерял, чтобы объяснить это.
для возобновления: Мой XMLParser отлично работает, когда поток поступает из context.getResources(). openRawResource (id); но не тогда, когда он приходит из строки Почему?
Спасибо за любые идеи
Джейсон
Кажется, вы не устанавливаете обработчик содержимого в пути кода, который принимает строку.
Почему бы не обернуть String в StringReader и не проанализировать это?
InputSource is = new InputSource(new StringReader(string));
xr.parse(is);
Пример (изменен):
private void getParsedXML(String s) throws Exception{
if(this.levelData == null){
/* Get a SAXParser from the SAXPArserFactory. */
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLHandlerLevel myExampleHandler = new XMLHandlerLevel();
XMLReader xr = sp.getXMLReader();
/* Begin parsing */
InputSource is = new InputSource(new StringReader(string));
xr.parse(is);
this.levelData = myExampleHandler.getLevelData();
Log.e("jason",(levelData!=null)?levelData.toString():null);
in.close();
}
}
Я не уверен, что он поможет u, но есть внешний файл jar, который называется Jsoup.jar, добавьте его в свой проект, у него есть API для разбора xml, html... см. учебник по интернету....