我有一個包含以下文本的XML標記SAX解析器:「A &藍調」(有沒有空間,在那裏 - 添加,這樣就不會轉化爲&這裏)Android的 - XML符號轉換
就好像它被轉換了兩次,並且由於「A」導致的&符號而被轉義。具體的過程:
XML文件下載
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();
數據在的endElement
else if (inLocalName.equalsIgnoreCase(_nodeTitle))
{
_titleValue = currentValue;
currentValue = "";
}
在調試中,符號已經轉換轉換與薩克斯,當我讀它的數據被截斷在處理程序中的我的角色方法中。
我已經看到了很多關於此的問題,但從來沒有一個解決方案。有任何想法嗎?
感謝
分析器:
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的單字節方法。 – 2012-04-14 17:43:17
我添加了下載代碼以防萬一有什麼相關的東西我不知道 - 因爲在&正在轉換。我用DOM解析器完成了完全相同的過程,但性能不可接受。輸出是正確的,但。 – user1222760 2012-04-14 17:55:31
仍然沒有足夠的上下文,但我仍然嘗試了一下。請參閱下面的答案。 – 2012-04-14 19:37:06