2017-06-02 4 views
-1

は私のXMLファイルです:は態度を与え、JavaでXMLファイルを読み込み、リターンノード・パスの下

<a path="A"> 
<b path="B"> 
    <c filename="C">1</c> 
    <c filename="D">2</c> 
    <c filename="E">3</c> 
</b> 
</a> 

そして、私は機能を持つようにしたい、私は1を与えた場合、それは、A/B/Cを返します。

2-> A/B/D

3-> A/B/E

+1

あなたのコードはどこですか? –

+0

私はそれをどうするのか分からないので、コードはありません:) –

答えて

0

それを行うことができる方法の例

public static void main(String[] args) throws Exception { 
    String str = "<a path=\"A\"><b path=\"B\"><c filename=\"C\">1</c><c filename=\"D\">2</c><c filename=\"E\">3</c></b></a>"; 
    Map<String, String> map = new HashMap<>(); 
    Deque<String> stack = new LinkedList<>(); 
    StringBuilder sb = new StringBuilder(); 
    DefaultHandler sax = new DefaultHandler() { 

     @Override 
     public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { 
      String path = "?"; 
      for (int index = 0 ; index < attributes.getLength() ; index += 1) { 
       String localnameAttr = attributes.getLocalName(index); 
       if (localnameAttr.equals("path") || localnameAttr.equals("filename")) { 
        path = attributes.getValue(index); 
        break; 
       } 
      } 
      stack.offerLast(path); 
     } 

     @Override 
     public void endElement(String uri, String localName, String qName) throws SAXException { 
      StringBuilder path = new StringBuilder(); 
      for (String s : stack) { 
       path.append(s).append('/'); 
      } 
      if (path.length() > 0) { 
       path.setLength(path.length() - 1); 
       map.put(sb.toString(), path.toString()); 
      } 
      sb.setLength(0); 
      stack.removeLast(); 
     } 

     @Override 
     public void characters(char[] ch, int start, int length) throws SAXException { 
      sb.append(ch, start, length); 
     } 

    }; 
    SAXParserFactory spf = SAXParserFactory.newInstance(); 
    SAXParser saxPareser = spf.newSAXParser(); 
    saxPareser.parse(new ByteArrayInputStream(str.getBytes()), sax); 

    System.out.println("1 => " + map.get("1")); 
    System.out.println("2 => " + map.get("2")); 
    System.out.println("3 => " + map.get("3")); 

} 
関連する問題