2013-11-25 6 views
-1

XML을 저장/쓰기하고 싶습니다. JDOM을 사용하여 XML 파일에 특수 문자를 저장/쓰기 할 수 없습니다.
내가 이런 종류의 문자를 저장하려고 할 때 그것은 나에게 줄까요 ?? 문자 대신에 masrks.
나는이 문제에 대한 검색을하고 있지만 적절한 anwser를 얻을 수 없으므로 나를 도와주십시오.
내 코드에서는 먼저 xml을 읽고 몇 가지 변경 사항을 저장하고 저장합니다. 이것은 XML을 작성하기위한 제 Cide입니다.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

감사합니다 works.and CDATA 내 XML의 요구 사항입니다. – vijayk

+0

@vijayk : * 왜 * XML에 CDATA가 있어야합니까? 비 압축 CDATA 버전은 의미 상 동일해야합니다. –

+0

이 xml을 사용하여 플레이어를 시작합니다. 플레이어에서 xml과 xml의 모든 내용을 열기 위해서는 CDATA가 필요합니다. – vijayk