2016-03-25 42 views
1

從XML中的所有節點值中刪除所有前導/尾隨空白的最快方法是什麼?從所有XML值中刪除前導/後綴空白

我們有一個使用JDOM解析XML文檔的Java應用程序。

+0

JDOM有些在性能和存儲器使用方面最壞XML API,http://sdiwc.us/digitlib/journal_paper .PHP?紙張= 00000582.pdf –

回答

0

這裏是代碼片段做在VTD-XML

import com.ximpleware.*; 
import java.io.*; 
public class trim { 
    public static void main(String s[]) throws VTDException,IOException{ 
     VTDGen vg = new VTDGen(); 
     if (!vg.parseFile("d:\\xml\\input.txt", false)) 
      return; 
     VTDNav vn = vg.getNav(); 
     AutoPilot ap = new AutoPilot(vn); 
     XMLModifier xm = new XMLModifier(vn); 
     ap.selectXPath("//text()"); 
     int i=0; 
     long l=0; 
     while((i=ap.evalXPath())!=-1){ 
      l=vn.getTokenOffset(i)| ((long)vn.getTokenLength(i))<<32; 
      l = vn.trimWhiteSpaces(l); 
      xm.updateToken(i,vn,(int)l,(int)(l>>32)); 
     } 
     xm.output("d:\\xml\\output.txt"); 
    } 
} 
0

這是我與JDOM手動解決方案。它似乎工作,但讓我知道任何問題,如果你看到任何。

public static void trimWhitespace(Element element) 
{ 
    List<Element> children = (List<Element>)element.getChildren(); 
    if (children != null) 
    { 
     for (int i = 0; i < children.size(); i++) 
     { 
      Element child = children.get(i); 

      if (child.getChildren() != null && child.getChildren().size() > 0) 
       trimWhitespace(child); 
      else 
      { 
       // Leaf Element 
       if (child.getText() != null) 
       { 
        child.setText(child.getText().trim()); 
       } 
      } 
     } 
    } 
} 

這種遞歸函數調用最初與根元素,

trimWhitespace(rootElement);