DOM4J ВВЕДЕНИЕ
Адрес проекта DOM4J: http://sourceforge.net/projects/dom4j/?source=directory
DOM4J - это простая библиотека с открытым исходным кодом для обработки XML, XPATH и XSLT.
DOM4J использует DOM4J после загрузки проекта DOM4J, распаковывать его и добавить свой пакет JAR (моя текущая версия называется DOM4J-1.6.1.JAR) в путь класса.
(Свойства-> java build path-> Добавить внешние банки ...).
Затем вы можете использовать API, который он обеспечивает для программирования.
Пример программы 1
Первая программа использует код Java для генерации документа XML, а код следующим образом:
пакет com.example.xml.dom4j; import java.io.fileoutputstream; импорт java.io.filewriter; импорт org.dom4j.document; импорт org.dom4j.documenthel per; импорт org.dom4j.element; импорт org.dom4j. io .OutputFormat; Import org.Dom4j.io.xmlWriter;/** * Dom4j Framework учится использовать структуру DOM4J для создания XML -документа и вывода и сохранения * */public class dom4jtest1 {public static void main (Strin g [] Args) Throws Exception {// Первый метод: создать документ и создать корневой элемент // Создать документ: используйте документ Helper Class = DocumentHelper.createdocument (); root = documentHelper.createElement ("St Udent"); Document2 = DocumentHelp er.createdocument (root2); Element WorldElement = root2.add ("World"); .Writ E (Document); "Стад Ent.xml"), Format); FileWriter ("Студент2.xml"), Format);
Программная консольная вывод:
<? XML версия = "1.0" Encoding = "UTF-8"?> <Студент/>
Сгенерированный документ XML:
<? xml version = "1.0" Encoding = "utf-8"?> <name студента = "Zhangsan"> <hello> Hello Text </hello> <world> мировой текст </world> </Student>
Пример программы 2
Пример программы 2, прочитайте документ XML и проанализируйте его, и выведите его содержимое.
Во -первых, документы, которые необходимо проанализировать, следующие:
<? xml version = "1.0" Encoding = "utf-8"?> <name студентов = "Zhangsan"> <hello name = "lisi"> hello text1 </hello> <hello name = "lisi2"> hello text2 < ::::::::::::::::: ::::::::::::::::: ::::::::::::::::::::::::: :::::::: /hello> <hello name = "lisi3"> hello text3 < /hello> <world name = "wangwu «> World Text1 </world> <world name =" wangwu2 "> World Text2 </world> <world> World te xt3 </world> </students> пакет com.example.xml.dom4j; импорт java.io. Файл; импортировать java.util.iterator; Import java.util.list; импорт javax.xml.parsers .documentbuilder; импорт javax. .dom4j.io.domreader; import org.dom4j.io.saxRead er;/** * dom4j Framework Learning: Read and Parse xml * * */public class dom4jtest2 {public static void main (string [] args) бросает исключение { SaxReader SaxReader = New SaxReader (); " + root.getName ()); // Получить список всех дочерних элементов <element> childlist = root.elements (); System. Дочерний элемент конкретного списка имени Указанный элемент имени FirstWorldElement = root.Element ("World"); AttruityValue ("name")); Итератор iter = root.elementiterator (); println ("Используйте Domreader ------------------------------------------------- ------------------------------------------------------ ------------------------------------------------------ ------------------------------------------------------ ------------------ DocumentBuilderFactory DBF = DocumentBuilderFactory.newinStance (); w3c.dom.document должен использоваться Document2 = db.parse (новый файл ("Студент.xml")); Element RootElement = Document3.get RootElement ();
После того, как код запускается, вывод:
Корень: Студент-эстотальный подсчет ребенка: 6Hello Child: 3first World Attr: name = wangwu Итеративный выход ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------ ------------------------------------------------------ ------------------------------------------------------ -------------------------------------- Ader ----- ------ ------------------ Корень: Студенты
Sax Parses XML
Ниже приведены шаги по реализации анализа сущностей в саксофонах
// Ниже приведен XMLreader для анализа (i) Шаг 1: Создать новый фабричный класс SaxParserFactory, код выглядит следующим образом:
SAXPARSERFACTORY FACTORY = SAXPARSERFACTORY.NEWINSTANCE ();
(2) Шаг 2: пусть класс завода генерирует саксеров Sax Parser Class Saxparser, код заключается в следующем:
Saxparser parser = factory.newsaxParser ();
(Iii) Шаг 3: Получите экземпляр XMLreader от SaxPSRSER, код заключается в следующем:
Xmlreader reader = parser.getxmlreader ();
(4) Шаг 4: Зарегистрируйте обработчик, который вы написали в XMLreader.
reader.setcontenthandler (это);
(V) Шаг 5: После превращения XML -документа или ресурса в поток InputStream, который может обрабатывать Java, официально начинается анализ, и код выглядит следующим образом:
reader.parse (новый inputsource (is));
// Следующее - использовать SaxParser для анализа (i) Первый шаг: Создайте новый заводской класс SaxParserFactory, код заключается в следующем:
SAXPARSERFACTORY FACTORY = SAXPARSERFACTORY.NEWINSTANCE ();
(2) Шаг 2: пусть класс завода генерирует саксеров Sax Parser Class Saxparser, код заключается в следующем:
Saxparser parser = factory.newsaxParser ();
(3) Шаг 3: После превращения XML -документа или ресурса в поток InputStream, который может обрабатывать Java, официально начинается анализ, и код заключается в следующем:
parser.parse (есть, это);
Я предполагаю, что все видели контент.
// Установите объект локатора, который может найти местоположение, где происходит событие содержимого документа
public void setdocumentlocator (локатор локатор)
// используется для обработки события начала анализа документов
public void startDocument () бросает саксексацию
// Обработайте событие начала элемента, и вы можете получить URI, имя элемента, таблицу классов атрибутов и другую информацию пространства имен, где элемент расположен из параметров.
Public void StartElement (строки имен Spacesuri, String LocalName, String QName, Attributes ATTS) бросает сакс -экз.
// Обработайте событие конечного элемента, и вы можете получить URI, имя элемента и другую информацию пространства имен, где элемент расположен из параметров.
public void endelement (String namespacesuri, String LocalName, String Qname) бросает саксексацию
// Обработайте содержание символов элемента, и вы можете получить контент из параметров
Public void символы (char [] ch, int start, int length) бросает саксексацию
Кстати, давайте представим методы в XmlReader.
// зарегистрировать и обрабатывать XML -документ, контент -контент -контент -handler
public void setContenthandler (ContentHandler обработчик)
// Начнете анализ документа XML
Public void parse (inputsorce input) бросает саксексацию
Я примерно закончил говорить.
Пакет Com.Emply.demo; {return _id; () {return _age;
Далее мы хотим внедрить контент -руку для анализа XML
Реализация контента -иудаль обычно требует следующих шагов
1. Объявите класс и наследуйте Defaulthandler. Defaulthandler - это базовый класс, который просто реализует контент -руку. Нам просто нужно переписать метод внутри.
2. Переписать startDocument () и enddocument ().
3. Переписать StartElement (). Часто некоторые данные выполняются в этой функции, оценивая значение локального имени.
4. Перепишите метод символов (), который является методом обратного вызова. После того, как анализатор выполнил startElement (), этот метод будет выполнен после анализа содержимого узла, а параметр CH [] является содержанием узла.
5. Переписать метод Endelement (). Defaulthandler и Re-re Напишите следующие методы
Общедоступный класс SAX_PARSERXML Extends Defaulthandler { / *** Это событие будет запускается при анализе объявления файла XML. Method Super.StartDocument (); {// TODO Auto Generation Super.Startelement (URI, LocalName, QName, Attributes); ] ch, int start, int length) Throws Saxexception {// Todo Auto Generated Method Super.characters (Ch, Start, Length); @Override public void endelement (String uri, String LocalName, String QName) Throws SaxException {// Todo Auto Generated Method Super.endelement T (URI, LocalName, QName);
Во -первых, мы создаем список для сохранения данных проанализированного человека
Список <Derson> люди;
но? Где инициализировать? Мы можем инициализировать его в startDocument (), потому что это событие будет вызвано при анализе объявления файла XML, поэтому более уместно поместить его здесь
/ *** Это событие будет вызвано при анализе декларации файла XML. );
Далее мы начнем анализировать
/ *** Это событие будет инициировано при анализе начального тега элемента**/ @Override public void startElement (String uri, String localname, String qname, атрибуты атрибутов) бросает SaxException {// todo AutoGenerated Method Super Super Super .startelement (uri, local -name, qname, атрибуты); attributes.getValue ("id"));
В приведенном выше коде LocalName представляет имя элемента в настоящее время проанализировано
// Шаг // 1. ** * Это событие запускается при чтении текстового элемента. , start, длина); equals ("name")) {// Добавить полученное значение в лицо Person.set_name (txt);
Далее это то, что вам нужно сделать, когда заканчивается тег
/ *** Это событие будет инициировано при чтении конечного тега**/ @override public void endelement (String uri, строка Localname, String Qname) Throws Saxexception {// Todo Auto-Gen Erupted Метод Super.endElement (uri , LocalName, Qname); ::::::::::::::::: :::::::::::: "";}
Анализ, вероятно, процесс
1. Метод запуска будет вызван в начале элемента.
2. Следующий метод символов будет называться, который можно использовать для получения значения элемента.
3. Когда элемент заканчивается, метод эндоэлемента будет вызван после завершения анализа.
Общественный список <Person> readxml (inputStream) {SaxParserFactory Factory = SaxParserFactory.newinStance (); Второй метод xmlreader reader = parser.getxmlreader (); возвращать люди;
Приведенный выше код не объясняет.
Пакет Com .xml.sax.attributes; ДЕМО. SAXPARSER PARSER = FACTORY.NEWSAXPARSER (); (New InputSource (IS)); Вы можете выполнить работу по инициализации* / @override public void startDocument () бросает SaxException {// Todo Auto Generation Method Super.StartDocument (); * * Это событие будет инициировано при анализе тега начала элемента * */ @Override public void startElement (String uri, строка локального имени, строка Qname, атрибуты атрибутов) бросает SA xException {// Todo AutoGenerated Метод STUB Super. StartElement (Uri, LocalName, QName, Attributes); .getValue ("id")); Выбросить SaxExc Episode {// TODO Auto Generated Method Super.characters (ch, start, length); start, length); "Age")) {человек. Throws SaxExc Episode {// TODO Auto-Greated Method Super.endelement (uri, localname, qname); человек! = null) {persons.add (человек);
Напишите метод, чтобы назвать этот класс
Список <Person> persons = new SAX_PARSERXML (). Readxml (IS); ); .get_age () + "/n");
Если вы видите следующее описание интерфейса, анализ был успешным ~
краткое содержание:
DOM (модель объекта файла). Диаграмм: анализатор считывает весь документ, затем создает структуру дерева, резидентов-резидента памяти, и код может управлять этой структурой дерева в соответствии с интерфейсом DOM.
Преимущества: весь документ читается в память, удобно для работы: поддерживает различные функции, такие как модификация, удаление, воспроизведение и расположение.
Недостатки: прочитайте весь документ в память, сохранив слишком много ненужных узлов, тратя память и пространство.
Используйте случаи: после того, как документ прочитан, документ должен работать несколько раз, и когда аппаратные ресурсы достаточно (память, процессор).
Чтобы решить проблемы, существующие в DOM -анализации, происходит анализ саксофона. Его характеристики:
Преимущества: нет необходимости реализовать весь документ, который занимает меньше ресурсов. Особенно в встроенных средах, таких как Android, настоятельно рекомендуется использовать Sax Sainsing.
Недостатки: в отличие от DOM SAINGING, данные не являются постоянными. Если данные не сохраняются после события, данные будут потеряны.
Использование случая: у машины есть ограничения на производительность