2012-04-04 127 views
2

由於xml文件中的空格,我正面臨一個問題。我想從xml讀取數據,但由於節點之間的空間,我面臨各種問題。由於XML文件中的空格而無法讀取XML

Ex。

If a node has 4 childs, due to the spaces it shows 9 childs to the node. So when I try to display node values in table, some columns without heading and without data are also created.

When I removed these spaces I read my file successfully without any problem.

那麼如何解決這樣的問題?因爲每當我讀取多個xml文件時,我無法親自從文件中刪除空格。因此,從每個文件中刪除空格將是一件繁瑣的工作。

Document doc; 
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
doc = dBuilder.parse(fp); 
doc.getDocumentElement().normalize();    
NodeList nList = doc.getElementsByTagName("parameter"); 
nodeName = name; 
for (int temp = 0; temp < nList.getLength();temp++) 
{ 
    Node nNode = (Node) nList.item(temp); 
    Element eElement = (Element) nNode; 
    String upname1 = getTagValue("name", eElement); 
    System.out.println(nodeName+" UP: "+upname1); 

    if(upname1.equals(nodeName)) 
    { 
      NodeList pvalList = eElement.getElementsByTagName("paramvalues"); 
      for(int l=0; l< pvalList.getLength(); l++) 
      { 
       Node pNode = (Node) pvalList.item(l); 
       NodeList valList = pNode.getChildNodes(); 

       for(int j=0; j<valList.getLength(); j++) 
       { 
        Node valNode = (Node) valList.item(j); 

        if(valNode.getNodeName().equals("value")) 
        { 
          NamedNodeMap att = valNode.getAttributes(); 

          for(int s=0; s<att.getLength(); s++) 
          { 
           Node n1 = att.item(s); 
           System.out.println("len: "+att.getLength()); 
           if(n1.getNodeName().equals("default")) 
            def = n1.getNodeValue(); 

           if(n1.getNodeName().equals("actualvalue")) 
            aval = n1.getNodeValue(); 
          } 
         } 
       } 
      } 
    } 
} 

我知道這是一個奇怪的問題,但它在完成我的工作時變得惱人。

PLZ幫助..謝謝..

+2

你能告訴你的問題的Java代碼? – 2012-04-04 09:35:16

+1

這可能是因爲你的代碼沒有檢查Node是否是'Element'的一個實例。您可能需要過濾掉'文本節點'。這很簡單,但你需要顯示一些代碼:) – laher 2012-04-04 09:37:59

+0

1.在解析XML數據之前,先嚐試和「normalize()」。 2.請貼一些代碼! – 2012-04-04 09:41:12

回答

0

你可以嘗試只是讓一類,而你的文檔的解析爲例「約翰·史密斯」從字符串的左邊和右邊TRIM空白變成「約翰史密斯' | SRC:http://rosettacode.org/wiki/Strip_whitespace_from_a_string/Top_and_tail

public class Trims{ 
    public static String ltrim(String s){ 
     int i = 0; 
     while (i < s.length() && Character.isWhitespace(s.charAt(i))){ 
     i++; 
     } 
     return s.substring(i); 
    } 

    public static String rtrim(String s){ 
     int i = s.length() - 1; 
     while (i > 0 && Character.isWhitespace(s.charAt(i))){ 
     i--; 
     } 
     return s.substring(0, i + 1); 
    } 

    public static void main(String[] args){ 
     String s = " \t \r \n String with spaces \t \r \n "; 
     System.out.println(ltrim(s)); 
     System.out.println(rtrim(s)); 
     System.out.println(s.trim()); //trims both ends 
    } 

或找到一個不同的方式來處理內容..利用DOMBuilder的(http://www.java-tips.org/other-api-tips/jdom/dealing-with-mixed-content-whitespace-comments-text-child-elements-and.html

 // a builder takes a boolean value meaning validation mode: 
     DOMBuilder builder = new DOMBuilder(false); 

     // simply load the document:: 
     Document document = builder.build(
       new java.io.File("sample.xml")); 

     Element order = document.getRootElement(); 

     // find an address tag: 
     Element address = 
       order.getChild("purchased-by").getChild("address");