2017-06-14 24 views
0

SAXを使用してxml形式と同様の応答を解析しようとしています.Belowは私の応答形式です。ここでSAXを使用したJavaでのカスタムXML応答の解析

<Subscriber id="11005632326"> 
<info name="info1" value="12012012010"/> 
<info name="info2" value="11005632326"/> 
<info name="info3" value="12312321321"/> 
<info name="info4" value="hJLDos"/> 
<info name="info5" value="Apple A1778/Apple iPhone 7"/> 
<info name="group" value="above"/> 
<info name="language" value="en"/> 
<info name="lastotatime" value=""/> 
<info name="detected" value="2017-01-14 23:22:45.158365"/> 
</Subscriber> 

私はなどinfo1.value、info2.value、同様に、タグ内の各値の値を取得しようとしています。私は出力にINFO1値に

Current Element :info 
node valuenull 
info1 : 
+0

あなたはサックスを使用していません。あなたはDOMを使用していますか? –

答えて

1

をnullに取得していますように私は、コード

File fXmlFile = new File("c:/temp/admresp.xml"); 
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder dBuilder; 
    try { 
     dBuilder = dbFactory.newDocumentBuilder(); 
     Document doc = dBuilder.parse(fXmlFile); 
     doc.getDocumentElement().normalize(); 

     System.out.println("Root element :" + doc.getDocumentElement().getNodeName()); 
     NodeList nList = doc.getElementsByTagName("info"); 

     System.out.println("----------------------------"); 

     for (int temp = 0; temp < nList.getLength(); temp++) { 

      Node nNode = nList.item(temp); 

      System.out.println("\nCurrent Element :" + nNode.getNodeName()+"\n node value"+nNode.getNodeValue()); 
      nNode.getNodeValue(); 

      if (nNode.getNodeType() == Node.ELEMENT_NODE) { 

       Element eElement = (Element) nNode; 

       System.out.println("info1: " + eElement.getAttribute("info1")); 
      } 
     } 

    } catch (SAXException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (ParserConfigurationException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 

以下で試してみました

はSomoneのは、ここで私を助けることができる私は、getElementsByTagNameメソッドが唯一の直接の下の要素を返すと考えていますそれを呼び出す要素。したがって、ドキュメントではなくルート要素で使用することになります。空白/タブ/改行のようなものにも注意する必要があります。

この文書を反復するこの方法は、私の仕事です。

 Node child = doc.getDocumentElement().getFirstChild(); 
     while((child = child.getNextSibling()) != null) { 
      if(child instanceof Element) { 
       String name = ((Element) child).getAttribute("name"); 
       String value = ((Element) child).getAttribute("value"); 
       System.out.println("name: " + name + ", value: " + value); 
      } 
     } 
+0

ありがとう@steve、私はdocElement上で別のgetAttributeメソッド呼び出しを行い、正常に解決しました。 – Niyasim

0

以下のコードでは、タグ名の属性を取得することができます。値は私のケースではハッシュマップに挿入されています。

//Using factory get an instance of document builder 
     DocumentBuilder db = dbf.newDocumentBuilder(); 
     //parse using builder to get DOM representation of the XML file 
     dom=db.parse(new ByteArrayInputStream(xmlFile)); 
     Map<String,String> attrMap=new HashMap<String,String>(); 
     Element docEle = dom.getDocumentElement(); 
     //get a nodelist of  elements 
     NodeList nl = docEle.getElementsByTagName("info"); 
     if(nl != null && nl.getLength() > 0) { 
      for(int i = 0 ; i < nl.getLength();i++) { 

       //get the info element 
       Element el = (Element)nl.item(i); 

       attrMap.put(el.getAttribute("name"), el.getAttribute("value")); 
      } 
     } 
関連する問題