Unmarshal XML с содержанием UTF-16, как удалить специальный символ из нижней части XML-файла - PullRequest
0 голосов
/ 03 июля 2019

У меня есть XML, который содержит некоторые данные XML, которые я пытаюсь разобрать, но в нижней части файла XML есть какой-то специальный символ и которые содержат мне проблему, и он выдает ошибку

**org.xml.sax.SAXParseException; systemId: Content is not allowed in trailing section.**

если я попытался удалить этот символ вручную, то он отлично работает для меня.

Но у меня вопрос , как удалить этот специальный символ из файла во время выполнения .

Я попробовал следующий способ

enter image description here

JAXBContext jaxbContext = JAXBContext.newInstance(VariablePack.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();

InputStream is1= new FileInputStream("C:\\temp\\temop4.xml");

Reader reader = new InputStreamReader(is1);
SomeJavaClass someJavaClass = (SomeJavaClass) jaxbUnmarshaller.unmarshal(reader);

образец данных XML-файла внизу есть специальный символ

<?xml version="1.0" encoding="UTF-16" standalone="no" ?>
<NewStudioVariablePack>
  <projectName>ContextView_NG</projectName>
  <threadID>100015</threadID>
  <gSYSInstance>8</gSYSInstance>
  <variablesList>
    <contextVariables>
       <variable>
        <variableName>C.UserXML</variableName>
        <variableType>B</variableType>
        <variablePicture/>
        <blobType/>
        <value/>
      </variable>
      <variable>
        <variableName>C.sys.RemoteUser</variableName>
        <variableType>A</variableType>
        <variablePicture>30</variablePicture>
        <blobType/>
        <value/>
      </variable>
    </contextVariables>
  </variablesList>

</NewStudioVariablePack>
਍

1 Ответ

0 голосов
/ 03 июля 2019

Вы можете попытаться прочитать файл с обычным BufferedReader построчно и пропустить последнюю строку, но это не рекомендуется для анализа XML.Просто чтобы посмотреть, сможете ли вы прочитать этот символ таким образом.

Как этот персонаж попадает туда?Возможно, вы используете неправильную кодировку.

В противном случае установите блок try / catch вокруг кода синтаксического анализа, чтобы, по крайней мере, он не потерпел крах.

...