java - org.XML.sax.SAXParseException : Unexpected token (position:TEXT @1:2 in java. io.StringReader@959e0aa)

标签 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>

我希望有人能帮助我。

提前致谢。

最佳答案

我将解析器代码更改为:

     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 文件上没有出错,但使用此代码解决了这个问题。

现在可以了。

如果有人可以澄清这是如何发生的或者它到底做了什么,请随意这样做。

关于java - org.XML.sax.SAXParseException : Unexpected token (position:TEXT @1:2 in java. io.StringReader@959e0aa),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36081723/

相关文章:

java - 在android中添加两个字节数组

android - 如何在 macbook pro 上呈现/查看 android 屏幕?

xml - 处理格式错误的 XML

java - 编码时单组元素的 JAXB 元素包装器

java - 在 JPA 中使用列表时出现 ClassCastException

java - 如何解析 OffsetTime 格式为 HHmmssZ

java - Rails 的 javascript_include_tag 相当于 Struts 吗?

android - 多次收到广播以关闭和打开 Activity

sql - 分解 SQL 表中每一行的 XML

java - Eclipse 项目 "MyClass cannot be resolved to a type"