XML解析が初めてです。私はDOMとSAXパーサについて読んで、いくつかのサンプルの実装を試みました。しかし、私は以下タグを解析してタグの値属性内にデータを取得する
<?xml version="1.0" ?>
<collection>
<action value="submit"/>
<protocol_version value="1"/>
<reponse value="Success"/>
<batch>
<sample>
<count value="1"/>
<count2 value="2"/>
<count3 value="3"/>
</sample>
<sample_2>
<date value="10/10/2010"/>
<page value="SampleData"/>
<track value="123123123"/>
<same value="1.00"/>
<data>
<first_name value="Jeffrey"/>
<SSID value="1231231231"/>
<last_name value="Chuckle"/>
<field1 value="123123123"/>
<field2 value="Sam E. Bonzella"/>
<field3 value="SOME VALUE"/>
<field4 value="SOME VALUE 2"/>
<field5 value="TEXT"/>
<field6 value="12312"/>
</data>
</sample_2>
</batch>
</collection>
次のXMLデータを解析することができません、私が実装しようとしたが、それはrepetativeコードを必要とし、また、データが整理されていないサンプルコードです。私もJAXBパーサを試しましたが、value属性を取得できませんでした。
public class test {
public static void main(String[] args){
try {
File inputFile = new File("staff.xml");
DocumentBuilderFactory dbFactory
= DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(inputFile);
doc.getDocumentElement().normalize();
System.out.println("Base :"
+ doc.getDocumentElement().getNodeName());
NodeList nList = doc.getElementsByTagName("action");
for (int temp = 0; temp < nList.getLength(); temp++) {
Node nNode = nList.item(temp);
System.out.println("Element :"
+ nNode.getNodeName());
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
System.out.println("Action : "
+ eElement.getAttribute("value"));
}
}
nList = doc.getElementsByTagName("transaction_count");
for (int temp = 0; temp < nList.getLength(); temp++) {
Node nNode = nList.item(temp);
System.out.println("Element :"
+ nNode.getNodeName());
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
System.out.println("transaction_count : "
+ eElement.getAttribute("value"));
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
理想的には、データを配列に解析するか、またはマップにすることができます。