2017-06-01 9 views
0

XMLファイルをフレームワークVaadinでJavaのツリーに変換したい。しかし、1行でそれは木を取得し、私は小さな一のXML作ら理由を、理解するために私は理解していない:XMLとツリー、ツリーを取得する

<overlay> 
    <type>bgp</type> 
    <bgp> 
     <bgp-asn>12</bgp-asn> 
    </bgp> 
</overlay> 
<overlay-routing> 
    <type>test</type> 
    <b> 
     <bgp-as>11</bgp-as> 
    </b> 
</overlay-routing> 

そして、ここでの結果: tree

だから、あなただけの私を見ることができますXMLで私の行の名前を変更し、それは動作しますが、 "bgp-asn"では動作しませんし、本当に理解しません。それはXMLの重要な仕事ですか?それとも何か? 私は自分のコードを置くことができます。

private Component test(){ 
     VerticalLayout ver = new VerticalLayout(); 
     ver.setSizeFull(); 
     TextArea text = new TextArea(); 
     Button send = new Button("send"); 
     tre = new Tree(); 
     tre.setSizeFull(); 

     send.addClickListener(new ClickListener() { 
      @Override 
      public void buttonClick(ClickEvent event) { 
       if(text.isEmpty()){ 
        return; 
       } 
       Node node = getData(text.getValue()); 
       loadTree(tre, null, node); 
      } 
     }); 

private Document getData(String data){ 
     data = "<capsule>" + data; 
     data = data + "</capsule>"; 
     try { 
      if(data == null){ 
       return null; 
      } else { 
       try{ 
        builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
       } catch (ParserConfigurationException e){ 
        throw new RuntimeException("cannot create a data source", e); 
       } 
       return builder.parse(new ByteArrayInputStream(data.trim().getBytes("UTF-8"))); 
      } 
      //return data == null ? null : builder.parse(new ByteArrayInputStream(data.trim().getBytes("UTF-8"))); 
     } catch (SAXException | IOException e) { 
      throw new RuntimeException("cannot load data from content", e); 
     } 
    } 

とloadtree:あなたは間違っているものを知っている場合

private void loadTree(Tree tree, Object parentID, Node element){ 

     if(tree == null || element == null){ 
      return; 
     } 
     final String itemID = (element.getNodeType() == Node.TEXT_NODE ? element.getNodeValue() : element.getNodeName()).trim(); 

     if(itemID.length() == 0){ 
      return; 
     } 
     tree.addItem(itemID); 

     if(parentID != null){ 
      tree.setParent(itemID, parentID); 
     } 
     NodeList children = element.getChildNodes(); 
     System.out.println(parentID); 
     for(int i = 0, n = children.getLength(); i < n; i++){ 

      loadTree(tree, itemID, children.item(i)); 
     } 
     if(children.getLength() > 0){ 
      tree.expandItem(itemID); 
     } else{ 
      tree.setChildrenAllowed(itemID, false); 
     } 
    } 

を、それは素晴らしいことでしょう! ありがとうございました!

答えて

0

私は今、知っている、bgpとタグのような値に問題があった< bgp>私のコードは違いをもたらさなかった。私はそれを正しくするために2行を追加する必要があります。ここでは、関数の良い部分loadtree()

private void loadTree(Tree tree, Object parentID, Node element){ 

     if(tree == null || element == null){ 
      return; 
     } 

     final String itemID = (element.getNodeType() == Node.TEXT_NODE ? element.getNodeValue() : element.getNodeName()).trim(); 

     if (itemID.equals("#document")) { 
      loadTree(tree, null, element.getChildNodes().item(0)); 
      return; 
     } 

     if(itemID.length() == 0){ 
      return; 
     } 
//add this two lines 
     Object item = tree.addItem(); 
     tree.setItemCaption(item, itemID); 

     if(parentID != null){ 
      tree.setParent(item, parentID); 
     } 

     NodeList children = element.getChildNodes(); 
     for(int i = 0, n = children.getLength(); i < n; i++){ 

      loadTree(tree, item, children.item(i)); 
     } 

     if(itemID.equals("root")){ 
      tree.expandItem(item); 
     } 

     if(children.getLength() == 0){ 
      tree.setChildrenAllowed(item, false); 
     } 
    } 

そして今は完璧です! ありがとうございます。

関連する問題