2014-06-06 9 views
4

XML 파일을 열고 노드에서 몇 가지 속성을 편집 한 다음 다시 저장하는 XML 파일이 있는데 어떤 이유로 든 저장된 XML은 이전과 같이 올바르게 들여 쓰여지지 않습니다 . 나는 XML 파일에 저장되는 다음자바에서 XML 서식 지정 - 상태 들여 쓰기 유지

내 코드 :

TransformerFactory transformerFactory = TransformerFactory.newInstance();  
    Transformer transformer = transformerFactory.newTransformer(); 
    transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
    DOMSource source = new DOMSource(doc); 
    StreamResult result = new StreamResult(new File(Path)); 
    transformer.transform(source, result); 

내가 지정한 있지만이

transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 

는 XML 내가 상태에서 XML을하고 싶은, 제대로 들여 쓰기하지 않습니다 이전과 같이 (변경된 부분은 제외)

도움이 될 것입니다.

미리 감사드립니다.

+0

내 솔루션이 효과가 있었습니까? 그렇다면 대답으로 받아 들여야합니다. –

답변

1

당신은 'INDENT'를 활성화하고 변압기의 들여 쓰기 양을 설정해야이 작동하는지

transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); 

참조.

1

VTD-XML은 공백 형식을 유지하면서 XML 파일의 일부를 수정하는 Java 라이브러리입니다.

다음은 XPath를 사용하여 XML 파일의 특정 특성을 선택하는 코드입니다. 코드는 선택된 속성의 값을 수정 한 다음 결과를 출력 파일에 씁니다.

import com.ximpleware.AutoPilot; 
import com.ximpleware.ModifyException; 
import com.ximpleware.NavException; 
import com.ximpleware.TranscodeException; 
import com.ximpleware.VTDGen; 
import com.ximpleware.VTDNav; 
import com.ximpleware.XMLModifier; 
import com.ximpleware.XPathEvalException; 
import com.ximpleware.XPathParseException; 

import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.OutputStream; 

public class TransformFile 
{ 
    public static void main(String[] args) 
     throws IOException, XPathParseException, ModifyException, NavException, 
     XPathEvalException, TranscodeException 
    { 
     String inFilename = "input.xml"; 
     String outFilename = "output.xml"; 

     transform(inFilename, outFilename); 
    } 

    public static void transform(String inXmlFilePath, String outXmlFilePath) 
     throws XPathParseException, ModifyException, XPathEvalException, 
     NavException, IOException, TranscodeException 
    { 
     String xpath = 
      "//Configuration[starts-with(@Name, 'Release')]/Tool[@Name = 'VCCLCompilerTool']/@BrowseInformation[. = '0']"; 

     OutputStream fos = new FileOutputStream(outXmlFilePath); 
     try { 
      VTDGen vg = new VTDGen(); 
      vg.parseFile(inXmlFilePath, false); 
      VTDNav vn = vg.getNav(); 
      AutoPilot ap = new AutoPilot(vn); 
      ap.selectXPath(xpath); 

      XMLModifier xm = new XMLModifier(vn); 

      int attrNodeIndex; 
      while ((attrNodeIndex = ap.evalXPath()) != -1) { 
       // An attribute value node always immediately follows an 
       // attribute node. 
       int attrValIndex = attrNodeIndex + 1; 
       xm.updateToken(attrValIndex, "1"); 
      } 

      xm.output(fos); 
     } 
     finally { 
      fos.close(); 
     } 
    } 
}