org.XML.sax.SAXParseException:意外的标记(位置:java.io.StringReader@959e0aa中的TEXT @ 1:2)

时间:2016-03-18 10:16:11

标签: java android xml xml-parsing domparser

我目前是一家公司的实习生,他们让我为他们提供的服务创建一个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>

我希望有人能帮助我。

提前致谢。

1 个答案:

答案 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文件上,但使用这个代码解决了这个问题。

现在可行。

如果有人能够澄清这是怎么发生的,或者这是怎么回事,请随意这样做。