Я работаю с XML в BlackBerry.
В настоящее время я работаю со строкой XML, где одним из значений является другая строка XML.
проблема в том, что, в то время как другие значения извлекаются аккуратно, значение xml - нет.
только "<" извлекается из узла. </p>
то же самое, похоже, работает в обычном Java.
единственное различие, которое я вижу, - это способ, которым виден запрос:
в проекте Java:
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "text/xml;charset=UTF-8");
connection.setRequestProperty("Content-Length", "" + Integer.toString(resultText.getBytes().length));
connection.setUseCaches(false);
connection.setDoInput(true);
connection.setDoOutput(true);
Wheras, ежевика использует:
http.setRequestMethod(HttpConnection.POST);
http.setRequestProperty("User-Agent","Blackberry 8320/4.2.2 Profile/MIDP-2.0 Configuration/CLDC-1.1");
http.setRequestProperty("x-rim-transcode-content", "none");
http.setRequestProperty("Content-Type", "text/xml;charset=UTF-8");
http.setRequestProperty("Content-Length","" + Integer.toString(resultText.getBytes().length));
и следующий код используется для получения ответа от веб-службы:
на Java:
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
String line;
StringBuffer response = new StringBuffer();
while ((line = rd.readLine()) != null) {
response.append(line);
response.append('\r');
}
rd.close();
в ВВ
InputStream inStream = http.openInputStream();
// Get the length and process the data
int len = (int) http.getLength();
if (len > 0)
{
int actual = 0;
int bytesread = 0;
byte[] data = new byte[len];
while ((bytesread != len) && (actual != -1)) {
actual = inStream.read(data, bytesread, len - bytesread);
bytesread += actual;
}
String recd = new String(data, "UTF-8");
responseData = recd;
Кроме этих изменений, я не вижу никаких других отличий. встроенный xml отлично извлекается в java-проекте, но проект bb извлекает только «<»: - (</p>
любая помощь будет высоко ценится.
анализируемый xml-файл находится здесь :( не предоставил полный файл. Удалил все, кроме одного значения, во встроенном xml.
response:::::<?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas .xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.o rg/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://sche mas.xmlsoap.org/soap/encoding/" xmlns:tns="urn:glwsdl"><SOAP-ENV:Body><return xsi:type="SOAP-ENC:Arr ay" SOAP-ENC:arrayType="tns:CrosswordItem[1]"><item xsi:type="tns:CrosswordItem"><Date xsi:type="xsd :string">2012-01-04</Date><Crossword xsi:type="xsd:stri ng"><?xml version="1.0" encoding="UTF-8"?>
<crossword size="7">
<grid>
<cell position="5_6" value="&#xAB0;&#xABE;"/>
<cell position="6_6" value="&#xAA8;"/>
</grid>
<horizontalkeys>
<key number="19" position="3_6" length="4" answer="&#xA9 C;&#xABE;&#xAAB;&#xAB0;&#xABE;&#xAA8;" question="&#xA95;&#xAC7 ;&#xAB8;&#xAB0;"/>
</horizontalkeys>
<verticalkeys>
<key number="17" position="6_5" length="2" answer="&#xAA E;&#xABE;&#xAA8;" question="&#xA86;&#xAAC;&#xAB0;&#xAC2;, &#xA AA;&#xACD;&#xAB0;&#xAA4;&#xABF;&#xA B7;&#xACD;&#xAA0;&#xABE;"/>
</verticalkeys>
</crossword>
</Crossword><Gridsize xsi:type="xsd:string">7</Gridsize><Id xsi:type="xsd:string">63</Id></item></re turn></SOAP-ENV:Body></SOAP-ENV:Envelope>
редактирование:
Я частично решил проблему:
используя:
xmlEmbeddedData = xmlData.substring(xmlData.indexOf("<?xml version="1.0"encoding="UTF-8"?>"), xmlData.indexOf("</Crossword>"));
мне удалось извлечь то, что мне было нужно, в другую строку, с одной проблемой, строка xml, которую мне нужно проанализировать, теперь содержит: "& g t;" for>, "& l t;" для <и "& q u o;; a m p;" ... без пробелов ... </p>
Мне нужно декодировать строку и получить обратно строку XML, которую я могу проанализировать.
может кто-нибудь помочь?