XML теперь стал общим форматом обмена данными. Его платформа независимая, независимая от языка и независимая от системы приносит большое удобство для интеграции и взаимодействия данных. Для синтаксических знаний и технических деталей самого XML вам необходимо прочитать соответствующие технические документы. Содержимое, включенное здесь, включают DOM (модель объекта документа), DTD (определение типа документа), SAX (простой API для XML), XSD (определение схемы XML), XSLT (расширяемые преобразования языка стилей). Для получения подробной информации, пожалуйста, обратитесь к официальному документу W3C http://www.w3.org для получения дополнительной информации.
Методы анализа XML одинаковы на разных языках, но синтаксис реализации отличается. Есть два основных метода анализа, один называется Sax, а другой называется DOM. SAX основан на анализе потока событий, а DOM основан на анализе структуры дерева документов XML. Предположим, что содержание и структура нашего XML следующие:
<? xml version = "1.0" Encoding = "UTF-8"?> <meffice> <memploeee> <mame> ddviplinux </name> <ses> m </sex> <возраст> 30 </age> </inportee> </usmentee>
В этой статье используется Java Language для реализации генерации и анализа документов XML Dom и Sax.
Во -первых, определите интерфейс для работы XML -документов XMLOCUMENT, который определяет интерфейс для установления и анализа документов XML.
/ ***** @author hongliang.dinghl* Определите интерфейс между установлением документа XML и анализом*/ public interface xmldocument {/ *** create xml документ* @param файл файла файла полного пути*/ public void createxml (String filename); / *** Parse XML документ* @param файл файла файла полного пути } 1. Дом генерирует и анализирует XML -документы
Определяет набор интерфейсов для проанализированной версии документа XML. Парсер считывает весь документ, а затем строит структуру дерева с резидентом памяти, и затем код может использовать интерфейс DOM для работы этой структуры дерева. Преимущества: все дерево документов находится в памяти, в которой легко работать; поддерживает различные функции, такие как удаление, модификация и перестройка; Недостатки: весь документ передается в память (включая бесполезные узлы), тратя время и пространство; В использовании: После того, как документ будет анализируется, необходимо получить доступ к этим данным много раз; Достаточные аппаратные ресурсы (память, процессор).
импортировать java.io.fileinputstream; Импорт java.io.filenotFoundException; Импорт java.io.fileOutputStream; импортировать java.io.ioexception; импортировать java.io.inputstream; Импорт java.io.printwriter; Импорт javax.xml.parsers.documentbuilder; Импорт javax.xml.parsers.documentbuilderfactory; Импорт javax.xml.parsers.parserconfigurationexception; импортировать javax.xml.transform.outputkeys; импортировать javax.xml.transform.transformer; импортировать javax.xml.transform.transformerconfigurationexception; импортировать javax.xml.transform.transformerexception; Импорт javax.xml.transform.transformerfactory; импортировать javax.xml.transform.dom.domsource; Импорт javax.xml.transform.stream.streamResult; Импорт org.w3c.dom.document; Импорт org.w3c.dom.element; Импорт org.w3c.dom.node; Импорт org.w3c.dom.nodelist; Импорт org.xml.sax.saxException; / ** * * @author hongliang.dinghl * Dom Generation and Sanaging XML Documents */ Public Class Domdemo реализует Xmldocument {Private Document Document; частное имя файла; public void init () {try {documentBuilderFactory factory = documentBuilderFactory .newinStance (); DocumentBuilder Builder = Factory.NewDocumentBuilder (); this.document = builder.newdocument (); } catch (parserconfigurationException e) {System.out.println (e.getMessage ()); }} public void createxml (String FileName) {element root = this.document.createElement ("Сотрудники"); this.document.appendchild (root); Element ormemantee = this.document.createElement ("Сотрудник"); Имя элемента = this.document.createElement ("name"); name.appendchild (this.document.createTextNode ("Ding Hongliang")); employee.appendchild (имя); Element sex = this.document.createElement ("sex"); sex.appendchild (this.document.createtextnode ("m")); сотрудник. Applendchild (пол); Элемент возраст = this.document.createElement («Возраст»); age.AppendChild (this.document.createTextNode ("30")); сотрудник. Applendchild (возраст); root.appendchild (сотрудник); Transformerffactory TF = TransformerFactory.newinStance (); try {Transformer Transformer = tf.newTransformer (); Domsource source = new domsource (документ); Transformer.SetOutputProperty (outputKeys.encoding, "GB2312"); Transformer.SetOutputProperty (outputKeys.indent, "Да"); Printwriter pw = new PrintWriter (New FileOutputStream (имя файла)); Streamresult result = new StreamResult (PW); Transformer.Transform (источник, результат); System.out.println («Сгенерировать файл XML успешно!»); } catch (TransformOnfigurationException e) {System.out.println (e.getMessage ()); } catch (allogalargumentException e) {System.out.println (e.getMessage ()); } catch (filenotFoundException e) {System.out.println (e.getMessage ()); } catch (transformerexception e) {System.out.println (e.getMessage ()); }} public void parserxml (string fileName) {try {documentBuilderFactory dbf = documentBuilderFactory.newinStance (); DocumentBuilder db = dbf.newdocumentbuilder (); Документ документ = db.parse (имя файла); Nodelist Commials = document.getChildNodes (); for (int i = 0; i <efference.getLength (); i ++) {node employee = employs.item (i); Nodelist employeeInfo = employee.getChildNodes (); for (int j = 0; j <employeeInfo.getLength (); j ++) {node node = employeeInfo.item (j); Nodelist emportionEemeta = node.getChildNodes (); for (int k = 0; k <hopectemeta.getLength (); k ++) {System.out.println (employeemeta.item (k) .getNodEname () + ":" + heporteemeta.item (k) .getTextContent ()); }}} System.out.println ("parsermeta.item (k) .getTextContent ());} catch (filenotfoundexception e) {System.out.println (e.getmessage ());} catch (parserconfigurationexexexexexexexexexexexexexexexexexuration (e.getmessexexuration (atempringexexexexexexexexexexexexexexexexexexexexexexexexexexcre e) {System.out.println (e.getMessage ()); 2. Sax генерирует и анализирует XML -документы
Чтобы решить проблему DOM, появляется Sax. Саксофон, управляемый событием. Когда анализатор обнаруживает начало элемента, конец элемента, начало или конца документа и т. Д., Он отправляет события, а программист записывает код, чтобы ответить на эти события и сохраняет данные. Преимущества: не нужно заранее вводить весь документ, он занимает меньше ресурсов; Код SAX SARSER меньше кода DOM SARSER, подходящий для апплета и загрузки. Недостатки: не постоянные; После события, если данные не сохранены, данные будут потеряны; без гражданства; Только текст может быть получен из события, но он не знает, какой элемент принадлежит тексту; Показания использования: апплет; Требуется только небольшое количество контента из документа XML и редко возвращается к доступу; машинная память низкая;
импортировать java.io.fileinputstream; Импорт java.io.filenotFoundException; импортировать java.io.ioexception; импортировать java.io.inputstream; Импорт javax.xml.parsers.parserconfigurationexception; Импорт javax.xml.parsers.saxparser; Импорт javax.xml.parsers.saxparserfactory; Импорт org.xml.sax.attributes; Импорт org.xml.sax.saxException; Импорт org.xml.sax.helpers.defaulthandler; / ** * * @author hongliang.dinghl * sax document parsing */ public class saxdemo реализует xmldocument {public void createxml (String fileName) {System.out.println ("<<"+filename+">>"); } public void parserxml (String FileName) {SaxParserFactory SAXFAC = SAXPARSERFACTORY.NEWINSTANCE (); try {saxparser saxparser = saxfac.newsaxparser (); InputStream IS = new FileInputStream (имя файла); saxparser.parse (is, new mysaxhandler ()); } catch (parserconfigurationexception e) {e.printstacktrace (); } catch (saxexception e) {e.printstacktrace (); } catch (filenotFoundException e) {e.printstackTrace (); } catch (ioException e) {e.printstackTrace (); }} класс MySaxHandler Extends Delaulthandler {boolean hasattribute = false; Атрибуты атрибуты = null; public void startDocument () Throws SaxException {System.out.println («Документ начал печать»); } public void endDocument () Throws SaxException {System.out.println («Документ закончил печать»); } public void StartElement (String URI, String LocalName, String Qname, атрибуты атрибутов) бросает SaxException {if (qname.equals ("Сотрудники")) {return; } if (qname.equals ("employtee")) {System.out.println (qname); } if (attributes.getLength ()> 0) {this.attributes = attributes; this.hasattribute = true; }} public void endelement (String uri, String LocalName, String QName) Throws SaxException {if (hasatTribute && (attributes! = null)) {for (int i = 0; i <attributes.getLength (); i ++) {System.out.println (attributes.getqname (0) attributes.get.get. }}} public void символы (char [] ch, int start, int length) throws saxexception {system.out.println (new String (ch, start, length)); }} пакет com.alisoft.facepay.framework.bean; импортировать java.io.fileinputstream; Импорт java.io.filenotFoundException; импортировать java.io.ioexception; импортировать java.io.inputstream; Импорт javax.xml.parsers.parserconfigurationexception; Импорт javax.xml.parsers.saxparser; Импорт javax.xml.parsers.saxparserfactory; Импорт org.xml.sax.attributes; Импорт org.xml.sax.saxException; Импорт org.xml.sax.helpers.defaulthandler; / ** * * @author hongliang.dinghl * sax document parsing */ public class saxdemo реализует xmldocument {public void createxml (String fileName) {System.out.println ("<<"+filename+">>"); } public void parserxml (String FileName) {SaxParserFactory SAXFAC = SAXPARSERFACTORY.NEWINSTANCE (); try {saxparser saxparser = saxfac.newsaxparser (); InputStream IS = new FileInputStream (имя файла); saxparser.parse (is, new mysaxhandler ()); } catch (parserconfigurationexception e) {e.printstacktrace (); } catch (saxexception e) {e.printstacktrace (); } catch (filenotFoundException e) {e.printstackTrace (); } catch (ioException e) {e.printstackTrace (); }}} класс MySaxHandler Extends Delaulthandler {boolean hasattribute = false; Атрибуты атрибуты = null; public void startDocument () Throws SaxException {System.out.println («Документ начал печать»); } public void endDocument () Throws SaxException {System.out.println («Документ закончил печать»); } public void StartElement (String URI, String LocalName, String Qname, атрибуты атрибутов) бросает SaxException {if (qname.equals ("Сотрудники")) {return; } if (qname.equals ("employtee")) {System.out.println (qname); } if (attributes.getLength ()> 0) {this.attributes = attributes; this.hasattribute = true; }} public void endelement (String uri, String LocalName, String QName) Throws SaxException {if (hasatTribute && (attributes! = null)) {for (int i = 0; i <attributes.getLength (); i ++) {System.out.println (attributes.getqname (0) attributes.get.get. }}} public void символы (char [] ch, int start, int length) throws saxexception {system.out.println (new String (ch, start, length)); }}3. Dom4j генерирует и анализирует XML -документы
Dom4J - очень, очень отличный API Java XML, с отличной производительностью, мощными функциями и чрезвычайно простыми в использовании, а также программное обеспечение с открытым исходным кодом. В настоящее время вы можете видеть, что все больше и больше программного обеспечения Java используют DOM4J для чтения и написания XML. Особенно стоит отметить, что даже JAXM Sun использует DOM4J.
Импорт java.io.file; Импорт java.io.fileWriter; импортировать java.io.ioexception; Импорт java.io.writer; импортировать java.util.iterator; Импорт org.dom4j.document; Импорт org.dom4j.documentException; Импорт org.dom4j.documentHelper; Импорт org.dom4j.element; Импорт org.dom4j.io.saxReader; Импорт org.dom4j.io.xmlwriter; / ** * * * @author hongliang.dinghl * dom4j генерирует документы XML и документы Parse XML */ public class dom4jdemo реализует Xmldocument {public void createxml (строковый файл) {Document DocumentHelper.createdocument (); Element сотрудники = document.addelement («Сотрудники»); Element urpoyee = employms.addelement («Сотрудник»); Element name = employee.addelement ("name"); name.settext ("ddvip"); Element sex = employtee.addelement ("sex"); sex.settext ("m"); Элемент возраст = сотрудник. AddeLement («Возраст»); age.settext ("29"); try {writer fileWriter = new FileWriter (файл имени); XMLWRITER XMLWRITER = NEW XMLWRITER (FileWriter); xmlwriter.write (документ); xmlwriter.close (); } catch (ioException e) {System.out.println (e.getMessage ()); }} public void parserxml (string filename) {file inputxml = new File (filename); SaxReader SaxReader = new SaxReader (); try {document document = saxreader.read (inputxml); Element сотрудники = document.getRootelement (); for (iterator i = сотрудники.elementiterator (); for (iterator j = employee.elementiterator (); j.hasnext ();) {element node = (element) j.next (); System.out.println (node.getName ()+":"+node.getText ()); }}} catch (documentException e) {System.out.println (e.getMessage ()); } System.out.println ("dom4j parserxml"); }}4. Jdom генерирует и анализирует XML
Чтобы уменьшить количество кодирования DOM и SAX, появился JDOM; Преимущества: 20-80 принцип, значительно сокращая количество кода. Использование случаев: функции, которые должны быть реализованы, просты, такие как анализ, создание и т. Д., Но внизу JDOM по -прежнему использует Sax (чаще всего используется), DOM и Xanan.
Импорт java.io.filenotFoundException; Импорт java.io.fileOutputStream; импортировать java.io.ioexception; импортировать java.util.list; Импорт org.jdom.document; Импорт org.jdom.element; Импорт org.jdom.jdomexception; Импорт org.jdom.input.saxbuilder; Импорт org.jdom.output.xmloutputter; / ** * * @author hongliang.dinghl * Jdom Generate и Parse XML Documents * */ Public Class JdomDemo реализует Xmldocument {public void createxml (String FileName) {документ документ; Элемент корень; root = new Element («Сотрудники»); Document = новый документ (root); Element ormemantee = new Element («Сотрудник»); root.addcontent (сотрудник); Имя элемента = новый элемент ("имя"); name.settext ("ddvip"); сотрудник. AddContent (имя); Элемент Sex = новый элемент («секс»); sex.settext ("m"); сотрудник. Элемент возраст = новый элемент («Возраст»); age.settext ("23"); Сотрудник. Аддент (возраст); Xmloutputter xmlout = new xmloutputter (); try {xmlout.output (document, new FileOutputStream (FileName)); } catch (filenotFoundException e) {e.printstackTrace (); } catch (ioException e) {e.printstackTrace (); }} public void parserxml (String filename) {SaxBuilder Builder = new SaxBuilder (false); try {document document = builder.build (имя файла); Element сотрудники = document.getRootelement (); Список hookseeel = employeees.getchildren ("Сотрудник"); для (int i = 0; iElement employee = (element) unybilitist.get (i); list employeeinfo = employee.getchildren (); for (int j = 0; jsystem.out.println ((element) unpormationeeinfo.get (j)). getName ()+":"+(element) unpiecteeInfo.get (j)). (Jdomexception e) {e.printstacktrace ();Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.