そして、「&」ではありません
SAXParser オブジェクトを使用して、実際の XML を解析します。
これは通常、XMLReader.Parse メソッドに URL を渡すことによって行われます。私の XML は Web サービスへの POST 要求から来ているため、その結果を文字列として保存し、StringReader / InputSource を使用してこの文字列を XMLReader.Parse メソッドにフィードバックしています。
しかし、XMLstring の 2001 文字目で奇妙なことが起こっています。
ドキュメント ハンドラーの 'characters' メソッドは、startElement メソッドと endElement メソッドの間で 2 回呼び出され、文字列 (この場合はプロジェクト タイトル) を効果的に 2 つに分割します。文字メソッドでオブジェクトをインスタンス化しているため、1 つではなく 2 つのオブジェクトを取得しています。
この行では、文字列に約 2000 文字が含まれており、「文字」が 2 回発生し、「Lower」と「Level」の間で中断されます。
<title>SUMC-BOOKSTORE, LOWER LEVEL RENOVATIONS</title>
StringReader / InputSource の回避策をバイパスして、フラットな XML ファイルを XMLReader.Parse にフィードすると、まったく問題なく動作します。
StringReader や InputSource に関する何かが、どういうわけかこれを台無しにしています。
これは、SAXParser を使用して XML 文字列を取得し、解析する私の方法です。
public void parseXML(String XMLstring) {
try {
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
xr.setContentHandler(this);
// Something is happening in the StringReader or InputSource
// That cuts the XML element in half at the 2001 character mark.
StringReader sr = new StringReader(XMLstring);
InputSource is = new InputSource(sr);
xr.parse(is);
} catch (IOException e) {
Log.e("CMS1", e.toString());
} catch (SAXException e) {
Log.e("CMS2", e.toString());
} catch (ParserConfigurationException e) {
Log.e("CMS3", e.toString());
}
}
XML 文字列のこの時点に到達したときに、「文字」が 2 回発火しないようにする方法についてのアイデアをいただければ幸いです。
または、POST 要求を使用して URL を Parse 関数に渡す方法を教えてください。
ありがとうございました。