我目前是一家公司的实习生,他们让我为他们提供的服务创建一个Android应用程序,让应用程序正常工作我需要阅读一个可以通过soaprequest获得的设置文件。
我已经使用过一次这样的文件和其他数据了,但是我遇到了一些问题,但是这些问题很容易解决,但是这个问题在过去几个小时里一直困扰着我。
我收到此错误:
03-18 10:57:30.775 12815-12815/com.example.stagiair.testomgeving W/System.err: org.xml.sax.SAXParseException: Unexpected token (position:TEXT @1:2 in java.io.StringReader@959e0aa)
03-18 10:57:30.776 12815-12815/com.example.stagiair.testomgeving W/System.err: at org.apache.harmony.xml.parsers.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:146)
03-18 10:57:30.776 12815-12815/com.example.stagiair.testomgeving W/System.err: at com.example.stagiair.testomgeving.DomParser.buildDomDocument(DomParser.java:42)
03-18 10:57:30.776 12815-12815/com.example.stagiair.testomgeving W/System.err: at com.example.stagiair.testomgeving.dbTest$1.resultReady(dbTest.java:36)
03-18 10:57:30.776 12815-12815/com.example.stagiair.testomgeving W/System.err: at com.example.stagiair.testomgeving.HttpReader.onPostExecute(HttpReader.java:76)
03-18 10:57:30.776 12815-12815/com.example.stagiair.testomgeving W/System.err: at com.example.stagiair.testomgeving.HttpReader.onPostExecute(HttpReader.java:17)
03-18 10:57:30.776 12815-12815/com.example.stagiair.testomgeving W/System.err: at android.os.AsyncTask.finish(AsyncTask.java:651)
03-18 10:57:30.776 12815-12815/com.example.stagiair.testomgeving W/System.err: at android.os.AsyncTask.-wrap1(AsyncTask.java)
03-18 10:57:30.776 12815-12815/com.example.stagiair.testomgeving W/System.err: at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:668)
03-18 10:57:30.776 12815-12815/com.example.stagiair.testomgeving W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102)
03-18 10:57:30.776 12815-12815/com.example.stagiair.testomgeving W/System.err: at android.os.Looper.loop(Looper.java:148)
03-18 10:57:30.776 12815-12815/com.example.stagiair.testomgeving W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5417)
03-18 10:57:30.776 12815-12815/com.example.stagiair.testomgeving W/System.err: at java.lang.reflect.Method.invoke(Native Method)
03-18 10:57:30.776 12815-12815/com.example.stagiair.testomgeving W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
03-18 10:57:30.776 12815-12815/com.example.stagiair.testomgeving W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
我知道这里已经提到了很多次,但提供的答案似乎都不适合我。我花了最后两个小时寻找解决方案,但没有任何进展。
我可以提供XML结构,但不能提供整个XML,因为它包含的数据我不应该只是放在互联网上。
XML: 此XML文件似乎没有与之关联的任何样式信息。文档树如下所示。
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body xmlns="">
<WebServerResponse>
<Settings>
<KantoorUren>
</KantoorUren>
<PersoneelData>
<Persoon></Persoon>
</PersoneelData>
<MaterieelData>
<Materieel></Materieel>
</MaterieelData>
<HulpMaterieelData>
<HulpMaterieel></HulpMaterieel>
</HulpMaterieelData>
<AftekenDiensten>
<Dienst></Dienst>
</AftekenDiensten>
<Statussen>
<Status></Status>
</Statussen>
</Settings>
</WebServerResponse>
</soap:Body>
</soap:Envelope>
编辑:哦,我忘了..这是解析器代码
public void buildDomDocument (String newXml){
String xml = newXml.replaceAll(">\\s+<", "><").trim();
DocumentBuilderFactory dbf =
DocumentBuilderFactory.newInstance();
try
{
DocumentBuilder db = dbf.newDocumentBuilder();
InputSource is = new InputSource();
is.setCharacterStream(new StringReader(xml));
doc = db.parse(is);
} catch (ParserConfigurationException e) {
Log.e("Error: ", e.getMessage());
} catch (SAXException e) {
Log.e("Error: ", e.getMessage());
} catch (IOException e) {
Log.e("Error: ", e.getMessage());
}
}
编辑:我已经将这个解析器与一个xml一起使用了,它可以工作,我将提供两个XML文件,以便您可以发现任何差异。
使用XML:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body xmlns="">
<WebServerResponse>
<Personeel>
<PersonDetails>
<Person>Ron Weasley</Person>
<Mannummer>6</Mannummer>
<NaamKort>Ron W</NaamKort>
<Adres>Steenweg 2</Adres>
<Woonplaats>WUUSTWEZEL</Woonplaats>
<PostKode>3320 LL</PostKode>
<Telefoon>04-94885522</Telefoon>
<Uitwijktel></Uitwijktel>
<Afdeling>0</Afdeling>
<Email>wrwiz@gmail.com</Email>
</PersonDetails>
<BezettingPersoneel>
<BezettingPersoneelDetail>
<Datum>20160301</Datum>
<Mannummer>6</Mannummer>
<Omschrijving></Omschrijving>
<Naam>Ron W</Naam>
<Vertrektijd>7.30</Vertrektijd>
<Aankomsttijd>16.30</Aankomsttijd>
<Eindopdracht>16.00</Eindopdracht>
<Contactuur>8.00</Contactuur>
<Voorman>1</Voorman>
<AfwVanUur>0.00</AfwVanUur>
<AfwTotUur>0.00</AfwTotUur>
<Act1VanUur>0.00</Act1VanUur>
<Act1TotUur>0.00</Act1TotUur>
<Act2VanUur>0.00</Act2VanUur>
<Act2TotUur>0.00</Act2TotUur>
<Act1PauzeV>0.00</Act1PauzeV>
<Act1PauzeT>0.00</Act1PauzeT>
<Act2PauzeV>0.00</Act2PauzeV>
<Act2PauzeT>0.00</Act2PauzeT>
<AgendaLijn>
<RlNummer>21306</RlNummer>
<Opname-nr>1</Opname-nr>
<AgendaSeq>2</AgendaSeq>
<ContactTijd> `0 080000</ContactTijd>
<ContactDatum>20160301</ContactDatum>
<ContactUur>80000</ContactUur>
<ContactDuur>8.00</ContactDuur>
<MatAantal>2</MatAantal>
<PersAantal>3</PersAantal>
<Actie>26</Actie>
<ContactOms>Move box to second floor</ContactOms>
<Vertrektijd>7.30</Vertrektijd>
<AankomstTijd>16.30</AankomstTijd>
<Eindopdracht>16.00</Eindopdracht>
<MaxDatum>0</MaxDatum>
<OpnameDossier>
<DossierNr>1160067</DossierNr>
<RlNummer>21306</RlNummer>
<OpnameNr>1</OpnameNr>
<PerDatum1>20160301</PerDatum1>
<PerDatum2>0</PerDatum2>
<VolGeschat>35.000</VolGeschat>
<VolEenheid>9</VolEenheid>
<TotAfstand>0.000</TotAfstand>
<TotColli>0.00</TotColli>
<TotBrutoKg>0.00</TotBrutoKg>
<TotNettoKg>0.00</TotNettoKg>
<TotTarraKg>0.00</TotTarraKg>
<TotBrutoLb>0.00</TotBrutoLb>
<TotNettoLb>0.00</TotNettoLb>
<TotTarraLb>0.00</TotTarraLb>
<TotVolCbm>0.000</TotVolCbm>
<TotVolCft>0.000</TotVolCft>
<TotVolGew>0.000</TotVolGew>
<Beheerder>76</Beheerder>
<Zoeknaam>NORTHMAN</Zoeknaam>
<DebiteurNr>25669</DebiteurNr>
<SrtVerhuis>1</SrtVerhuis>
<Goederen></Goederen>
</OpnameDossier>
<AdressenPerAgenda>
<AdresDetail>
<Rlnummer>21306</Rlnummer>
<OpnameNr>1</OpnameNr>
<AdresSeq>2</AdresSeq>
<typeVAdres>9</typeVAdres>
<Naam1>Mister H. Clint</Naam1>
<Naam2></Naam2>
<Naam3></Naam3>
<BezoekAdres1>Henkseweg 44</BezoekAdres1>
<BezoekAdres2></BezoekAdres2>
<BezoekAdres3></BezoekAdres3>
<PostCodeBez>2260 EK</PostCodeBez>
<BezoekPlaats>RUURGEM</BezoekPlaats>
<Land>0</Land>
<Taal>0</Taal>
<Transporteur>0</Transporteur>
<ChauffeurNr>0</ChauffeurNr>
<ChauffeurVr></ChauffeurVr>
<KentekenNr>0</KentekenNr>
<KentekenVr></KentekenVr>
<ChassisNr>0</ChassisNr>
<ChassisVr></ChassisVr>
<VmedNummer></VmedNummer>
<VmedType>0</VmedType>
<VmedStatus>0</VmedStatus>
<Seal></Seal>
<BoekingsRef></BoekingsRef>
<GevrDatum>0</GevrDatum>
<GevrUur>0.00</GevrUur>
<GeplDatum>0</GeplDatum>
<GeplUur>0.00</GeplUur>
<WerkDatum>0</WerkDatum>
<WerkUur>0.00</WerkUur>
<WerkDuur>0.00</WerkDuur>
<Country>NL</Country>
<Language></Language>
</AdresDetail>
</AdressenPerAgenda>
</AgendaLijn>
</BezettingPersoneelDetail>
</BezettingPersoneel>
</Personeel>
</WebServerResponse>
</soap:Body>
</soap:Envelope>
XML失败:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body xmlns="">
<WebServerResponse>
<Settings>
<KantoorUren>
<AM_FROM>06:00</AM_FROM>
<AM_TILL>12:00</AM_TILL>
<PM_FROM>13:00</PM_FROM>
<PM_TILL>20:00</PM_TILL>
</KantoorUren>
<PersoneelData>
<Persoon>
<Person>Frank Jackson</Person>
<Mannummer>235</Mannummer>
<NaamKort>Frank J</NaamKort>
<Naam>Frank Jackson</Naam>
<Adres></Adres>
<Woonplaats></Woonplaats>
<PostKode></PostKode>
<Telefoon></Telefoon>
<Uitwijktel></Uitwijktel>
<Email></Email>
</Persoon>
</PersoneelData>
<MaterieelData>
<Materieel>
<Materieelnr>22</Materieelnr>
<Kenteken>GHP-235</Kenteken>
<Omschrijving>Truck</Omschrijving>
</Materieel>
</MaterieelData>
<HulpMaterieelData>
<HulpMaterieel>
<Code>Cart. Box</Code>
<Omschrijving>Cartboard Box</Omschrijving>
<Volgnummer>2</Volgnummer>
</HulpMaterieel>
</HulpMaterieelData>
<AftekenDiensten>
<Dienst>
<Code>101</Code>
<Omschrijving>Retreived necklace</Omschrijving>
</Dienst>
</AftekenDiensten>
<Statussen>
<Status>
<Volgorde>1</Volgorde>
<Code>12</Code>
<HoofdStatus>Stop</HoofdStatus>
<SubStatus></SubStatus>
<Omschrijving>Stop</Omschrijving>
<LetterCode>S</LetterCode>
<Kleurcode>22</Kleurcode>
</Status>
</Statussen>
</Settings>
</WebServerResponse>
</soap:Body>
</soap:Envelope>
我希望有人能帮助我。
提前致谢。
答案 0 :(得分:0)
我将解析器代码更改为:
public void buildDomDocument (String newXml){
String xml = newXml.replaceAll(">\\s+<", "><").trim();
Log.e("XML: ", xml);
DocumentBuilderFactory dbf =
DocumentBuilderFactory.newInstance();
try
{
DocumentBuilder db = dbf.newDocumentBuilder();
byte[] bytes = Charset.forName("UTF-8").encode(xml).array();
InputStream is = new ByteArrayInputStream(bytes);
} catch (ParserConfigurationException e) {
Log.e("Error: ", e.getMessage());
} catch (SAXException e) {
Log.e("Error: ", e.getMessage());
} catch (IOException e) {
Log.e("Error: ", e.getMessage());
}
}
显然,或者至少我从中得到的是,UTF-8编码在这个过程的某个地方出错了,而且它没有在其他XML文件上,但使用这个代码解决了这个问题。
现在可行。
如果有人能够澄清这是怎么发生的,或者这是怎么回事,请随意这样做。