2013-11-25 3 views
-1

Я хочу сохранить/написать xml в то время, когда я не могу сохранить/записать специальный символ в XML-файле, используя JDOM.
Когда я пытаюсь сохранить этот тип персонажа, он дает мне ??? masrks вместо характера.
Я ищу эту проблему, но я не могу получить правильный андерсер, поэтому, пожалуйста, помогите мне.
В моем коде я сначала прочитал xml, а затем сохранил/написал этот xml с небольшими изменениями. Это мой ключ написать xml.Как сохранить/написать специальный символ в XML?

try { 
      String path="D://test//N2019_set1.xml"; 
      File structureXml = new File(path); 
      SAXBuilder saxb = new SAXBuilder(); 
      Document document = saxb.build(structureXml); 
      Element rootElement = document.getRootElement(); 
      XMLOutputter xmlOutput = new XMLOutputter(); 

      List qestList = rootElement.getChildren(); 
      for (int i = 0; i < qestList.size(); i++) { 
       Element quesList = (Element) qestList.get(i); 
       System.out.println(quesList.getAttributeValue("ans")); 
       //change ans field 
       quesList.setAttribute("ans", ""+i); 
       List qList = quesList.getChildren(); 
       for(int a=0;a< qList.size();a++){ 
        Element ques =(Element) qList.get(a); 
        if(ques.getAttributeValue("file")!=null){ 
         //read xml 
         System.out.println(ques.getAttributeValue("file")); 
         //write xml attribute 
         System.out.println(ques.setAttribute("file","dasd"+a)); 
        } 
        if(ques.getName().equalsIgnoreCase("question")){ 
         //read 
         System.out.println(ques.getTextTrim()); 
         ques.removeContent(); 
         ques.addContent(new CDATA("question"+a)); 
        } 
        if (ques.getName().equalsIgnoreCase("options")) { 
         List optList = ques.getChildren(); 
         for (int k = 0; k < optList.size(); k++) { 
          Element option = (Element) optList.get(k); 
          if(option.getAttributeValue("file")!=null){ 
           System.out.println(option.getAttributeValue("file")); 
           //write xml attribute 
           System.out.println(option.setAttribute("file","sadas"+k)); 
          } 
          if(option.getName().equalsIgnoreCase("option")){ 
           //read 
           System.out.println(option.getTextTrim()); 
           option.removeContent(); 
           option.addContent(new CDATA("option"+k)); 
          } 
         } 
        } 
        if(ques.getName().equalsIgnoreCase("explaination")){ 
         //read 
         System.out.println(ques.getTextTrim()); 
         ques.removeContent(); 
         ques.addContent(new CDATA("explaination"+a)); 
        } 
       } 
       }   
       xmlOutput.output(document, new FileWriter(path)); 
//    System.out.println(xmlOutput.outputString(document)); 
     }catch (JDOMException ex) { 
      ex.printStackTrace(); 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 

это мой файл XML

<?xml version="1.0" encoding ="utf-8" ?> 
<mcss> 
    <quest ans="1"> 
     <question><![CDATA[Write 5x= 3y-1 as linear equation form.]]></question> 
     <options> 
      <option><![CDATA[5x-3y+1=0]]></option> 
      <option><![CDATA[-5x-3y-1=0]]></option> 
      <option><![CDATA[5x+3y+1=0]]></option>   
     </options> 
     <explaination><![CDATA[Recall the linear equation in two variables form.]]></explaination> 
    </quest> 
</mcss> 
+1

Почему вы используете CDATA? А какой здесь «особый характер»? Ваш код не упоминает об этом ... –

+0

спасибо за ответ .. ≠ этот тип персонажа, если вы собираетесь написать это, то после сохранения он выглядит? отметка. – vijayk

ответ

3

Ваш вопрос неясен, но я подозреваемый это может быть проблема - это, по крайней мере проблема:

xmlOutput.output(document, new FileWriter(path)); 

FileWriter всегда использует кодировку по умолчанию для платформы, тогда как ваш XML-документ утверждает, что он находится в UTF-8. Вместо этого используйте FileOutputStream, передавая это методу output ... пусть сам XMLOutputter имеет дело с кодировкой.

Кроме того, неясно, почему вы используете все эти разделы CDATA - просто текст должен быть в порядке.

+0

спасибо, что это работает. И CDATA - это требование в моем XML. – vijayk

+0

@vijayk: * Зачем вам нужно иметь CDATA в вашем XML? Это звучит как сломанное требование - версия, отличная от CDATA, должна быть семантически эквивалентной. –

+0

, используя этот xml, мы запускаем плеер. Чтобы открыть xml и весь контент xml в проигрывателе, он требует CDATA. – vijayk

Смежные вопросы