私はJavaとXmlの解析に非常に慣れていません。私の要件は、xml ファイルを取得し、XML ファイルのデータを Java を使用してテーブルと列の形式でデータベースに格納することです。私はグーグルで正しい解決策を見つけようとしました。しかし、私は無力です。これまで私が行ったことは、xml データを動的に取得し、タグ名または値のいずれかを保存することでした。しかし、私の要件は、行形式の特定の列に関連する列名とデータとしてタグ名を1回だけ取得することです。誰でも私のコードを修正してください。
<?xml version="1.0"?>
<company>
<staff>
<firstname>yong</firstname>
<lastname>mook kim</lastname>
<nickname>mkyong</nickname>
<salary>100000</salary>
</staff>
<staff>
<firstname>low</firstname>
<lastname>yin fong</lastname>
<nickname>fong fong</nickname>
<salary>200000</salary>
</staff>
</company>
Java コード
import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.*;
public class XmlData{
static public void main(String[] arg){
try {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter XML File Path: ");
String xmlFile = bf.readLine();
//Store the String into the File
File file = new File(xmlFile);
if(file.exists()){
// Create a factory
DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance();
// Use the factory to create a builder
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(xmlFile);
Element docEle = doc.getDocumentElement();
System.out.println("Root element of the document: "+ docEle.getNodeName());
// Get a list of all elements in the document
NodeList list = doc.getElementsByTagName("*");
int totalElements = list.getLength();
System.out.println("XML Elements: " + totalElements);
for (int i=0; i<list.getLength(); i++)
{
// Get element
Element element = (Element)list.item(i);
String tag=element.getTagName();
String name=list.item(0).getChildNodes().item(0).getNodeValue();
System.out.println(name);
System.out.print(tag);
System.out.print(" ");
//System.out.println(element.getNodeName());
}
}
else{
System.out.print("File not found!");
}
}
catch (Exception e) {
System.exit(1);
}
}
}
このコードの出力:
company
staff
firstname
lastname
nickname
salary
staff
firstname
lastname
nickname
salary
期待される出力:
FirstName, Lastname, nickname , salary //column
yong ,mook kim, mkyong , 100000 // rows
low ,yin fong, fong fong ,200000