Maison > Article > développement back-end > Quelles sont les manières d'analyser XML en Java ?
Les façons dont Java analyse XML incluent l'utilisation de l'analyse DOM pour les connecter ensemble dans une structure arborescente via des objets DOM ; l'utilisation de SAX pour l'analyser ligne par ligne lors de la rencontre de différents éléments ; Extrayez les données requises de
XML est un format d'échange de données universel. Son indépendance de plate-forme, son indépendance de langage et son indépendance de système apportent une grande commodité à l'intégration et à l'interaction des données. Ensuite, je présenterai en détail la méthode d'analyse XML en Java dans l'article, qui a un certain effet de référence, j'espère qu'elle sera utile à tout le monde
[Cours recommandé : Tutoriel XML]
Utilisation de l'analyse DOM
Analyseur DOM Il est principalement utilisé pour utiliser XML comme graphe d'objets (structure arborescente) en mémoire, qui est le modèle objet de document (DOM). Tout d'abord, l'analyseur parcourt le fichier XML d'entrée et crée des objets DOM correspondant aux nœuds du fichier XML. Ces objets DOM sont reliés entre eux dans une arborescence. Une fois que l'analyseur aura terminé le processus d'analyse, il obtiendra cette structure d'objet DOM arborescente. Exemple : analyser le contenu XML dans tous les exemples de codepublic 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; } }
Le résultat de sortie est :
Rakesh Mishra(111)Bangalore John Davis(112)Chennai Rajesh Sharma(113)Pune
Analyse avec SAX
La différence entre l'analyseur SAX et l'analyseur DOM est que l'analyseur SAX ne charge pas le XML complet en mémoire, mais le fait ligne par ligne lorsqu'il rencontre différents éléments d'analyse XML, c. déclenche différents événements tels que : balise d'ouverture, balise de fermeture, données de caractères, commentaires, etc. Le code pour analyser XML à l'aide de SAX Parser est le suivant :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; } }
Le résultat de sortie est :
Rakesh Mishra(111)Bangalore John Davis(112)Chennai Rajesh Sharma(113)Pune
Utilisation de StAX Parser
StAX est une API de streaming pour XML, et la différence entre StAX Parser et SA est SAX Parser. L'analyseur StAX est également différent de l'analyseur SAX SAX Parser poussera les données, mais l'analyseur StAX extraira les données requises du XML. L'analyseur StAX maintient le curseur à la position actuelle dans le document, permettant d'extraire le contenu disponible au niveau du curseur, tandis que l'analyseur SAX émet des événements lorsque certaines données sont rencontrées. XMLInputFactory et XMLStreamReader sont deux classes qui peuvent être utilisées pour charger des fichiers XML. Lorsque nous lisons un fichier XML à l'aide de XMLStreamReader, les événements sont générés sous forme de valeurs entières puis ces événements sont comparés aux constantes de XMLStreamConstants. Le code suivant montre comment analyser XML à l'aide de l'analyseur StAX :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; } }
Le résultat est :
Rakesh Mishra(111) Bangalore John Davis(112) Chennai Rajesh Sharma(113) PuneRésumé : C'est tout pour cela article L'intégralité du contenu est ici, j'espère qu'il sera utile à tout le monde
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!