Java が XML を解析する方法には、DOM 解析を使用して DOM オブジェクトを介してツリー構造に接続すること、SAX を使用して異なる要素に遭遇したときに行ごとに解析すること、StAX 解析を使用して XML を解析することなどが含まれます。
XML は汎用のデータ交換形式であり、プラットフォーム、言語、システムに依存しないため、データの統合と相互作用に大きな利便性をもたらします。次に、Java で XML を解析する方法をこの記事で詳しく紹介しますが、一定の参考効果があり、皆様のお役に立てれば幸いです。 ##[推奨コース:
#XML チュートリアル
#]#DOM 解析の使用 #DOM パーサー 主に、XML をメモリ内のオブジェクト グラフ (ツリー構造)、つまりドキュメント オブジェクト モデル (DOM) として使用するために使用されます。まず、パーサーは入力 XML ファイルを走査し、XML ファイル内のノードに対応する DOM オブジェクトを作成します。これらの DOM オブジェクトはツリー構造でリンクされています。パーサーが解析プロセスを完了すると、このツリー状の DOM オブジェクト構造が取得されます。 例: すべてのコード例の XML コンテンツを解析しますpublic class DOMParserDemo {
public static void main(String[] args) throws Exception {
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document =
builder.parse(
ClassLoader.getSystemResourceAsStream("xml/employee.xml"));
List<Employee> empList = new ArrayList<>();
NodeList nodeList = document.getDocumentElement().getChildNodes();
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
if (node instanceof Element) {
Employee emp = new Employee();
emp.id = node.getAttributes().
getNamedItem("id").getNodeValue();
NodeList childNodes = node.getChildNodes();
for (int j = 0; j < childNodes.getLength(); j++) {
Node cNode = childNodes.item(j);
if (cNode instanceof Element) {
String content = cNode.getLastChild().
getTextContent().trim();
switch (cNode.getNodeName()) {
case "firstName":
emp.firstName = content;
break;
case "lastName":
emp.lastName = content;
break;
case "location":
emp.location = content;
break;
}
}
}
empList.add(emp);
}
}
for (Employee emp : empList) {
System.out.println(emp);
}
}
}
class Employee{
String id;
String firstName;
String lastName;
String location;
@Override
public String toString() {
return firstName+" "+lastName+"("+id+")"+location;
}
}
Rakesh Mishra(111)Bangalore John Davis(112)Chennai Rajesh Sharma(113)Pune
SAX 解析を使用します
SAX パーサーと DOM パーサーの違いは、SAX パーサーは完全な XML をメモリにロードせず、さまざまな要素に遭遇すると XML を 1 行ずつ解析することです。 c 次のようなさまざまなイベントをトリガーします。開始タグ、終了タグ、文字データ、コメントなど。SAX パーサーを使用して XML を解析するコードは次のとおりです:
import java.util.ArrayList; import java.util.List; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class SAXParserDemo { public static void main(String[] args) throws Exception { SAXParserFactory parserFactor = SAXParserFactory.newInstance(); SAXParser parser = parserFactor.newSAXParser(); SAXHandler handler = new SAXHandler(); parser.parse(ClassLoader.getSystemResourceAsStream("xml/employee.xml"), handler); for ( Employee emp : handler.empList){ System.out.println(emp); } } } class SAXHandler extends DefaultHandler { List<Employee> empList = new ArrayList<>(); Employee emp = null; String content = null; @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { switch(qName){ case "employee": emp = new Employee(); emp.id = attributes.getValue("id"); break; } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { switch(qName){ case "employee": empList.add(emp); break; case "firstName": emp.firstName = content; break; case "lastName": emp.lastName = content; break; case "location": emp.location = content; break; } } @Override public void characters(char[] ch, int start, int length) throws SAXException { content = String.copyValueOf(ch, start, length).trim(); } } class Employee { String id; String firstName; String lastName; String location; @Override public String toString() { return firstName + " " + lastName + "(" + id + ")" + location; } }
Rakesh Mishra(111)Bangalore
John Davis(112)Chennai
Rajesh Sharma(113)Pune
StAX は XML のストリーミング API に使用され、StAX パーサーと SA の違いは SAX パーサーです。 StAX パーサーは SAX パーサーとも異なり、SAX パーサーはデータをプッシュしますが、StAX パーサーは必要なデータを XML から抽出します。 StAX パーサーはドキュメント内の現在位置にカーソルを維持し、カーソルで利用可能なコンテンツを抽出できるようにします。一方、SAX パーサーは特定のデータが見つかったときにイベントを発行します。
XMLInputFactory と XMLStreamReader は、XML ファイルのロードに使用できる 2 つのクラスです。 XMLStreamReader を使用して XML ファイルを読み取ると、イベントが整数値の形式で生成され、これらのイベントが XMLStreamConstants の定数と比較されます。次のコードは、StAX パーサーを使用して XML を解析する方法を示しています。 import java.util.ArrayList;
import java.util.List;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
public class StaxParserDemo {
public static void main(String[] args) throws XMLStreamException {
List<Employee> empList = null;
Employee currEmp = null;
String tagContent = null;
XMLInputFactory factory = XMLInputFactory.newInstance();
XMLStreamReader reader =
factory.createXMLStreamReader(
ClassLoader.getSystemResourceAsStream("xml/employee.xml"));
while(reader.hasNext()){
int event = reader.next();
switch(event){
case XMLStreamConstants.START_ELEMENT:
if ("employee".equals(reader.getLocalName())){
currEmp = new Employee();
currEmp.id = reader.getAttributeValue(0);
}
if("employees".equals(reader.getLocalName())){
empList = new ArrayList<>();
}
break;
case XMLStreamConstants.CHARACTERS:
tagContent = reader.getText().trim();
break;
case XMLStreamConstants.END_ELEMENT:
switch(reader.getLocalName()){
case "employee":
empList.add(currEmp);
break;
case "firstName":
currEmp.firstName = tagContent;
break;
case "lastName":
currEmp.lastName = tagContent;
break;
case "location":
currEmp.location = tagContent;
break;
}
break;
case XMLStreamConstants.START_DOCUMENT:
empList = new ArrayList<>();
break;
}
}
for ( Employee emp : empList){
System.out.println(emp);
}
}
}
class Employee{
String id;
String firstName;
String lastName;
String location;
@Override
public String toString(){
return firstName+" "+lastName+"("+id+") "+location;
}
}
Rakesh Mishra(111) Bangalore John Davis(112) Chennai Rajesh Sharma(113) Pune
以上がJava で XML を解析するにはどのような方法がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。