サンプル コードを使用して、Java で XML ファイルを読み取る最良の方法を教えてください。XML コンテンツは次のようになります。
<table sourceName="person" targetName="person">
<column sourceName="id" targetName="id"/>
<column sourceName="name" targetName="name"/>``
</table>
サンプル コードを使用して、Java で XML ファイルを読み取る最良の方法を教えてください。XML コンテンツは次のようになります。
<table sourceName="person" targetName="person">
<column sourceName="id" targetName="id"/>
<column sourceName="name" targetName="name"/>``
</table>
シンプルなフォームの単純な XML シリアライゼーションを使用できます。
import org.simpleframework.xml.Serializer;
import org.simpleframework.xml.core.Persister;
public class App {
public static void main(String[] args) throws Exception {
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<table sourceName=\"person\" targetName=\"person\">\n"
+ " <column sourceName=\"id\" targetName=\"id\"/>\n"
+ " <column sourceName=\"name\" targetName=\"name\"/>``\n"
+ "</table>";
Serializer serializer = new Persister();
Table table = serializer.read(Table.class, xml);
System.out.println(table.getSourceName());
System.out.println(table.getTargetName());
for (Column colunmn : table.getColumns()) {
System.out.println(colunmn.getSourceName());
System.out.println(colunmn.getTargetName());
}
}
}
Table
:
import java.util.List;
import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.ElementList;
import org.simpleframework.xml.Root;
@Root(name = "table")
public class Table {
@Attribute
private String sourceName;
@Attribute
private String targetName;
@ElementList(name = "column", inline = true)
private List<Column> columns;
public Table() {
}
public String getSourceName() {
return sourceName;
}
public void setSourceName(String sourceName) {
this.sourceName = sourceName;
}
public String getTargetName() {
return targetName;
}
public void setTargetName(String targetName) {
this.targetName = targetName;
}
public List<Column> getColumns() {
return columns;
}
public void setColumns(List<Column> columns) {
this.columns = columns;
}
}
Column
:
import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.Root;
@Root(name = "column")
public class Column {
@Attribute
private String sourceName;
@Attribute
private String targetName;
public Column() {
}
public String getSourceName() {
return sourceName;
}
public void setSourceName(String sourceName) {
this.sourceName = sourceName;
}
public String getTargetName() {
return targetName;
}
public void setTargetName(String targetName) {
this.targetName = targetName;
}
}
これは非常に小さな XML ファイルなので、DOM 解析を使用します。完全な例は次のとおりです。
http://www.mkyong.com/java/how-to-read-xml-file-in-Java-dom-parser/
しかし、本質的に:
File fXmlFile = new File("/Users/mkyong/staff.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
NodeList nList = doc.getElementsByTagName("table");
for (int temp = 0; temp < nList.getLength(); temp++) {
Node tableNode = nList.item(temp);
Element tableElement = (Element) tableNode;
System.out.println("Table source name: " + tableElement.getAttribute("sourceName"));
System.out.println("Table target name: " + tableElement.getAttribute("targetName"));
NodeList columnList = tableElement.getElementsByTagName("column");
for (int j = 0; j < columnList.getLength(); j++) {
Node columnNode = columnList.item(j);
Element columnElement = (Element) columnNode;
System.out.println("Column source name: " + columnElement.getAttribute("sourceName"));
System.out.println("Column target name: " + columnElement.getAttribute("targetName"));
}
}
例の上部にある関連するインポートを参照してください。
お役に立てば幸いです、A.
このテーマについては本が書かれていますが、それはすべて依存しています。JAXB は、ファイルの構造が単純で安定している場合に適しています (要素/属性を Java クラスにマップし、週に 3 回 Java クラスを変更して再コンパイルしたくない場合)。
それ以外にも、さまざまな汎用ツリー モデルがあります。DOM は最も広く使用され、最も古く、最悪です。JDOM2 または XOM をお勧めします。
しかし理想は、データを Java にまったく読み込まないようにすることです。「XRX」または「エンド ツー エンド XML」の原則は、XSLT や XQuery などの XML 指向の言語をアプリケーション全体に使用し、本当に必要な場合は Java サポート ルーチンをときどき呼び出すことです。