2012-04-04 7 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コードを表示することができますか? –

+1

これはおそらく、あなたのコードがNodeが 'Element'のインスタンスであるかどうかをチェックしないためです。おそらく、「テキストノード」を除外する必要があります。それはかなり簡単ですが、いくつかのコードを表示する必要があります:) – laher

+0

1. XMLデータを解析する前に 'normalize()'しようとしてください。 2.いくつかのコードを貼り付けてください! –

答えて

0

あなたはちょうどあなたが例のための文書を解析中に文字列の左と右から空白をトリムするクラスを作ってみることができ助けますスミス ' | 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"); 
関連する問題