Резюме нескольких способов анализа XML по Java
Первый тип: dom.
Полное имя DOM - это модель объекта документа, которая является моделью объекта документа. В приложении анализ XML на основе DOM преобразует документ XML в коллекцию объектных моделей (обычно называемые деревом DOM). Приложение реализует работу данных документа XML через операции на этой объектной модели. Через интерфейс DOM приложение может в любое время получить доступ к любой части данных в документе XML. Следовательно, этот механизм с использованием интерфейса DOM также называется механизмом случайного доступа.
Интерфейс DOM предоставляет способ получить доступ к информации о документе XML через иерархическую объектную модель. Эти иерархические модели объектов образуют дерево узлов на основе структуры документа XML. Независимо от типа информации, описанной в документе XML, даже данных таблицы, списков проектов или документа, модель, сгенерированная с использованием DOM, находится в форме дерева узлов. То есть DOM заставляет использовать модель дерева для доступа к информации в документе XML. Поскольку XML по сути является иерархической структурой, этот метод описания довольно эффективен.
Метод случайного доступа, предоставленный деревом DOM, обеспечивает большую гибкость для разработки приложений, и он может произвольно контролировать содержимое во всем документе XML. Однако, поскольку Analyzer DOM преобразует весь документ XML в дерево DOM и помещает его в память, потребность в памяти относительно высока, когда документ больше или структура относительно сложна. Более того, пересечение деревьев со сложными структурами также является трудоемкой операцией. Таким образом, анализаторы DOM имеют относительно высокие требования к производительности машины, и эффективность их реализации не очень идеальна. Однако, поскольку идея структуры дерева, принятой анализатором DOM, согласуется со структурой XML -документа и, учитывая удобство, вызванное случайным доступом, анализатор DOM по -прежнему имеет широкий диапазон полезного значения.
Импорт java.io.file; Импорт javax.xml.parsers.documentbuilder; Импорт javax.xml.parsers.documentbuilderfactory; Импорт org.w3c.dom.document; Импорт org.w3c.dom.element; Импорт org.w3c.dom.nodelist; открытый класс domTest1 {public static void main (string [] args) выбрасывает исключение {// Шаг 1: Получить фабрику DOM Parser (функция работы состоит в том, чтобы создать конкретный пастор) DocumentBuilderFactory dbf = documentBuilderFactory.newinStance (); // System.out.println ("Имя класса:" + dbf.getClass (). GetName ()); // Шаг 2: Получите конкретный DOM Parser DocumentBuilder db = dbf.newdocumentbuilder (); // System.out.println ("Имя класса:" + db.getClass (). GetName ()); // Шаг3: Разбор документа XML и получить документ документа (корневой узел) документ = db.parse (новый файл ("candidate.xml")); Nodelist list = document.getElementsbytagname ("человек"); for (int i = 0; i <list.getLength (); i ++) {element = (element) list.item (i); String content = element.getElementsbytagname ("name"). Item (0) .getFirstChild (). GetNoDevalue (); System.out.println ("name:" + content); content = element.getElementsbytagname ("адрес"). item (0) .getFirstChild (). getNoDevalue (); System.out.println ("Адрес:" + Content); content = element.getElementsbytagname ("tel"). item (0) .getFirstChild (). getNoDevalue (); System.out.println ("tel:" + content); content = element.getElementsbytagname ("fax"). item (0) .getFirstChild (). getNoDevalue (); System.out.println ("Fax:" + Content); content = element.getElementsbytagname ("email"). item (0) .getFirstChild (). getNoDevalue (); System.out.println ("Email:" + Content); System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Импорт java.io.file; Импорт javax.xml.parsers.documentbuilder; Импорт javax.xml.parsers.documentbuilderfactory; Импорт org.w3c.dom.attr; Импорт org.w3c.dom.comment; Импорт org.w3c.dom.document; Импорт org.w3c.dom.element; Импорт org.w3c.dom.namednodemap; Импорт org.w3c.dom.node; Импорт org.w3c.dom.nodelist; / ** * Используйте рекурсивно, чтобы проанализировать любой заданный документ XML и вывести его содержимое в командную строку * @author Zhanglong * */ public class domTest3 {public static void main (string [] args), выбрасывает исключение {documentBuilderFactory dbf = documentBuilderfactory.newinStance (); DocumentBuilder db = dbf.newdocumentbuilder (); Документ doc = db.parse (new File ("Student.xml")); // Получить элемент элемента корневого элемента root = doc.getDocumentElement (); parseelement (корень); } private static void parseelement (элемент элемента) {string tagname = element.getNodeName (); Nodelist Kids = element.getChildNodes (); System.out.print ("<" + Tagname); // Объект именодемапа, состоящий из всех атрибутов элемента элемента, должен быть оценен по именуемой MAP = element.getAttributes (); // Если элемент имеет атрибуты if (null! = Map) {for (int i = 0; i <map.getLength (); i ++) {// Получить каждый атрибут элемента attr = (attr) map.item (i); String attrname = attr.getName (); String attrvalue = attr.getValue (); System.out.print ("" + attrname + "=/" " + attrvalue +"/""); }} System.out.print (">"); for (int i = 0; i <kinds.getLength (); i ++) {node node = kids.item (i); // Получить тип узла Short Nodetype = node.getNodeType (); if (nodetype == node.element_node) {// Это элемент, продолжайте рекурсивно парировать ((элемент) узел); } else if (nodetype == node.text_node) {// рекурсивно выходить из системы. } else if (nodetype == node.comment_node) {System.out.print ("<!-"); Комментарий Комментарий = (Комментарий) Узел; // Comment Content String Data = Comment.getData (); System.out.print (data); System.out.print ("->"); }} System.out.print ("</" + Tagname + ">"); }}SAX: Полное имя SAX - это простой API для XML, который является интерфейсом простой прикладной программы XML. В отличие от DOM, режим доступа, предоставленный Sax, является последовательным режимом, который является способом быстро прочитать и записать данные XML. Когда XML -документ анализируется с использованием анализатора Sax, будет запустить ряд событий, а соответствующие функции обработки событий будут активированы. Приложение может получить доступ к документу XML через эти функции обработки событий. Следовательно, интерфейс SAX также называется интерфейсом, управляемым событиями.
Импорт java.io.file; Импорт javax.xml.parsers.saxparser; Импорт javax.xml.parsers.saxparserfactory; Импорт org.xml.sax.attributes; Импорт org.xml.sax.saxException; Импорт org.xml.sax.helpers.defaulthandler; открытый класс saxtest1 {public static void main (string [] args) выбрасывает исключение {// step1: получить экземпляр Sax Parser Parser Factory SaxParserFactory factory = saxparserfactory.newinstance (); // step2: Получите экземпляр Sax parser экземпляр Saxparser parser = factory.newsaxParser (); // step3: start parser.parse (new File ("study.xml"), новый myhandler ()); }} класс MyHandler Extends Delaulthandler {@Override public void startDocument () бросает SaxException {System.out.println ("parse начал"); } @Override public void endDocument () Throws SaxException {System.out.println ("parse закончил"); } @Override public void startElement (String uri, строка LocalName, String Qname, атрибуты атрибутов) Throws SaxException {System.out.println ("start element"); } @Override public void endElement (String uri, String LocalName, String QName) Throws SaxException {System.out.println ("Finish Element"); }} Импорт java.io.file; импортировать java.util.stack; Импорт javax.xml.parsers.saxparser; Импорт javax.xml.parsers.saxparserfactory; Импорт org.xml.sax.attributes; Импорт org.xml.sax.saxException; Импорт org.xml.sax.helpers.defaulthandler; открытый класс saxtest2 {public static void main (string [] args) бросает исключение {saxparserfactory factory = saxparserfactory.newinstance (); Saxparser parser = factory.newsaxParser (); parser.parse (новый файл ("Student.xml"), новый myhandler2 ()); }} класс myhandler2 Extends Defaulthandler {private Stack <string> Stack = new Stack <string> (); Приватное название строки; частный строковый пол; частный возраст строк; @Override public void startElement (String uri, String localName, String Qname, атрибуты атрибутов) Throws SaxException {Stack.push (qname); for (int i = 0; i <attributes.getLength (); i ++) {string attrname = attributes.getQname (i); String attrvalue = attributes.getValue (i); System.out.println (attrname + "=" + attrvalue); }} @Override public void символы (char [] ch, int start, int length) throws saxexception {string tag = Stack.peek (); if ("name" .equals (tag)) {name = new String (ch, start, length); } else if ("gender" .equals (Tag)) {gender = new String (ch, start, length); } else if ("age" .equals (tag)) {age = new String (ch, start, length); }} @Override public void endElement (string uri, string localname, string qname) throws saxexception {Stack.pop (); // Укажите, что элемент был проанализирован и должен выскочить из стека if ("Студент" .equals (qname)) {System.out.println ("name:" + name); System.out.println («Пол:» + пол); System.out.println («Возраст:» + возраст); System.out.println (); }}}JDom:
JDOM - это проект с открытым исходным кодом, основанный на структуре деревьев и использует технологию Pure Java для реализации анализа, генерации, сериализации и различных операций в документах XML. (http://jdom.org)
• JDom напрямую обслуживает Java Programming. Он использует множество функций более мощного языка Java (перегрузка метода, концепции сбора и т. Д.), Для эффективного объединения функций SAX и DOM.
• JDom - новая функция API для чтения, написания и эксплуатации XML на языке Java. Эти функции API оптимизированы в максимальной степени под предпосылкой прямой, простоты и эффективности.
Jdom Create Xml
Импорт java.io.fileWriter; Импорт org.jdom.atribute; Импорт org.jdom.comment; Импорт org.jdom.document; Импорт org.jdom.element; Импорт org.jdom.output.format; Импорт org.jdom.output.xmloutputter; открытый класс jdomTest1 {public static void main (string [] args) выбрасывает исключение {документ Document = new Document (); Элемент root = new Element ("root"); document.addcontent (root); Комментарий комментарий = новый комментарий («Это мои комментарии»); root.addcontent (комментарий); Элемент E = новый элемент ("Привет"); E.setattribute ("Sohu", "www.sohu.com"); root.addcontent (e); Элемент E2 = новый элемент ("мир"); Attribute attr = new Attribute ("test", "hehe"); e2.setattribute (attr); E.AddContent (E2); e2.addcontent (новый элемент ("aaa"). setattribute ("a", "b") .setattribute ("x", "y"). setattribute ("gg", "hh"). setText ("текстовое содержимое")); Format format = format.getPrettyFormat (); format.setindent (""); // format.setEncoding ("GBK"); Xmloutputter out = new xmloutputter (format); out.output (document, new FileWriter ("jdom.xml")); }}JDOM SAINING XML
Импорт java.io.file; Импорт java.io.fileOutputStream; импортировать java.util.list; Импорт org.jdom.atribute; Импорт org.jdom.document; Импорт org.jdom.element; Импорт org.jdom.input.saxbuilder; Импорт org.jdom.output.format; Импорт org.jdom.output.xmloutputter; открытый класс jdomTest2 {public static void main (string [] args) бросает исключение {saxbuilder builder = new saxbuilder (); Документ doc = builder.build (новый файл ("jdom.xml")); Элемент element = DOC.GETROOTELEMEMENT (); System.out.println (element.getName ()); Element hello = element.getchild ("hello"); System.out.println (hello.getText ()); Список списка = hello.getAttributes (); for (int i = 0; i <list.size (); i ++) {attribute attr = (attribute) list.get (i); String attrname = attr.getName (); String attrvalue = attr.getValue (); System.out.println (attrname + "=" + attrvalue); } hello.removechild ("World"); Xmloutputter out = new xmloutputter (format.getprettyformat (). Setindent ("" ")); out.output (doc, new FileOutputStream ("jdom2.xml")); }}Dom4j
Импорт java.io.fileOutputStream; Импорт java.io.fileWriter; Импорт org.dom4j.document; Импорт org.dom4j.documentHelper; Импорт org.dom4j.element; Импорт org.dom4j.io.outputformat; Импорт org.dom4j.io.xmlwriter; public class test1 {public static void main (string [] args) выбрасывает Exception {// Создать документ и установить узлом элемента корневого элемента: первый метод // документ Document = documentHelper.createdocument (); // // element root = documentHelper.createElement ("Студент"); // // document.setRootelement (root); // Создать документ и установить узел элемента корневого элемента документа: второй элемент метода root = documentHelper.createElement ("Студент"); Document Document = DocumentHelper.createdocument (root); root.addattribute ("name", "Zhangsan"); Element helloElement = root.AddeLement ("hello"); Element wordelement = root.addelement («мир»); helloElement.settext ("Привет"); WorderElement.Settext ("World"); helloElement.Addattribute («Возраст», «20»); Xmlwriter xmlwriter = new xmlwriter (); xmlwriter.write (документ); OutputFormat format = new OutputFormat ("", True); Xmlwriter xmlwriter2 = new xmlwriter (new FileOutputStream ("Student2.xml"), Format); xmlwriter2.write (документ); XMLWRITER XMLWRITER3 = NEW XMLWRITER (NEW FILEWRITER ("Студент3.xml"), Format); xmlwriter3.write (документ); xmlwriter3.close (); }} Импорт java.io.file; импортировать java.util.iterator; импортировать java.util.list; Импорт javax.xml.parsers.documentbuilder; Импорт javax.xml.parsers.documentbuilderfactory; Импорт org.dom4j.document; Импорт org.dom4j.element; Импорт org.dom4j.io.domreader; Импорт org.dom4j.io.saxReader; public class test2 {public static void main (string [] args) бросает исключение {SaxReader SaxReader = new SaxReader (); Документ doc = saxreader.read (new File ("Student2.xml")); Элемент root = doc.getRootelement (); System.out.println ("root element:" + root.getName ()); Список childlist = root.elements (); System.out.println (childlist.size ()); Список ChildList2 = root.Elements ("Hello"); System.out.println (ChildList2.size ()); Element First = root.Element ("Hello"); System.out.println (First.AttributeValue ("AGE")); for (iterator iter = root.elementiterator (); iter.hasnext ();) {element e = (element) iter.next (); System.out.println (e.attributevalue ("age")); } System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ DocumentBuilderFactory.newinStance (); D.GetRootElement (); Импорт java.io.fileWriter; Импорт org.jdom.atribute; Импорт org.jdom.document; Импорт org.jdom.element; Импорт org.jdom.output.format; Импорт org.jdom.output.xmloutputter; public class test3 {public static void main (string [] args) выбрасывает исключение {document document = new Document (); Element root = new Element ("Список контактов"). SetAttribute (новый атрибут ("Компания", "Группа А")); document.addcontent (root); Element contactPerson = new Element ("contact"); root.AddContent (контакт -лица); ContactPerson .AddContent (новый элемент ("имя"). setText ("Zhang San")) .AddContent (новый элемент ("Компания"). SetText ("Компания")). Element ("Street"). SetText ("5th Street")) .AddContent (новый элемент ("City"). SetText ("Shanghai"))) .AddContent (новый элемент ("провинция"). SetText ("shanghai"))); Xmloutputter output = new xmloutputter (format.getprettyformat () .setindent ("). Setencoding (" gbk ")); output.output (document, new FileWriter (" xctive.xml "));}}