私は次のテキストが含まれるXMLタグとSAXパーサー持っている:「&アンプを、B」(そこにはスペースがありません - それはここ&に変換しないように添加した)アンドロイド - のXMLアンパサンド変換
それは、2回変換され、 "A"の結果を持つアンパサンドのためにエスケープされているかのようです。ここではプロセスです:
XMLファイルは、データは、デバッグでのendElement
else if (inLocalName.equalsIgnoreCase(_nodeTitle))
{
_titleValue = currentValue;
currentValue = "";
}
にサックスで変換され
InputStream _inputStream = _urlConnection.getInputStream();
BufferedInputStream _bufferedInputStream = new BufferedInputStream(_inputStream);
ByteArrayBuffer _byteArrayBuffer = new ByteArrayBuffer(64);
int current = 0;
while((current = _bufferedInputStream.read()) != -1)
{
_byteArrayBuffer.append((byte)current);
}
FileOutputStream _fileOutputStream = openFileOutput(_file, MODE_PRIVATE);
_fileOutputStream.write(_byteArrayBuffer.toByteArray());
_fileOutputStream.close();
私はそれを読んだとき、アンパサンドが既に変換されたデータが切り捨てダウンロードされますハンドラ内の私の文字メソッドで。
これについて多くの質問がありましたが、解決策はありませんでした。何か案は?
おかげ
パーサ:
List<PropertiesList> _theList = null;
try
{
// Create Factory, Parser, Reader, Handler
SAXParserFactory _saxParserFactory = SAXParserFactory.newInstance();
SAXParser _saxParser = _saxParserFactory.newSAXParser();
XMLReader _xmlReader = _saxParser.getXMLReader();
HandlerReps _handler = new HandlerReps(inRegion, inAbbreviation);
_xmlReader.setContentHandler(_handler);
_xmlReader.parse(new InputSource(inStream));
_theList = _handler.getTheList();
}
ハンドラ:これは非常に可能性があなたの問題の原因である
// Called when Tag Begins
@Override
public void startElement(String uri, String inLocalName, String inQName, Attributes inAttributes) throws SAXException
{
currentElement = false;
}
// Called when Tag Ends
@Override
public void endElement(String inUri, String inLocalName, String inQName) throws SAXException
{
currentElement = false;
// Title
if (inLocalName.equalsIgnoreCase(_nodeValue))
{
if (_stateValue.equalsIgnoreCase(_abbreviation) &&
_countryValue.equalsIgnoreCase(_region))
{
// Construct the object
PropertiesRegion _regionObject = new PropertiesRegion(_titleValue, _address1Value);
cList.add(_regionObject);
Log.d(TAG, _regionObject.toString());
}
_titleValue = "";
_address1Value = "";
}
// Title
else if (inLocalName.equalsIgnoreCase(_nodeTitle))
{
_titleValue = currentValue;
currentValue = "";
}
// Address1
else if (inLocalName.equalsIgnoreCase(_nodeAddress1))
{
_address1Value = currentValue;
currentValue = "";
}
}
// Called to get Tag Characters
@Override
public void characters(char[] inChar, int inStart, int inLength) throws SAXException
{
if (currentElement)
{
currentValue = new String(inChar, inStart, inLength);
currentElement = false;
}
}
実際にXMLを解析するコードをもっと表示してください。 URLからファイルへのダウンロードは面倒です。 :-) openFileOutput()で何か間違っていない限り。それに、ここでダウンロードはかなり非効率な方法で行われましたが、これは別の質問です。一言で言えば、InputStream/OutputStreamのシングルバイトメソッドを使用しないでください。 –
私が気づいていないことがある場合に備えて、ダウンロードコードを追加しました。その時点で&が変換されています。私はDOMパーサで全く同じプロセスを実行しましたが、パフォーマンスは受け入れられませんでした。しかし、出力は正しいです。 – user1222760
まだ十分な文脈はありませんが、とにかく試してみました。下の私の答えを見てください。 –