Недавно я работал над эффективной платформой. Настраиваемый дисплей домашней страницы, но после упорной работы в течение двух недель, вероятно, после реализации функции я понял, что это не то, что я хочу сделать. Недели не были потрачены впустую, и я многому научился из этого.
Создавая систему, я часто сталкиваюсь с необходимостью читать XML. Почти то же самое, я обнаружил, что, почему я не заключил все эти операции в класс и не назвал их непосредственно при их использовании? , с этим менталитетом, продолжайте проверять онлайн (потому что я действительно чувствую, что в Интернете должно быть что -то, если я сам инкапсутствую, моя голова действительно получит воду).
Отображение исходного кода:
Кода -копия выглядит следующим образом:
пакет com.gxpt.struts2;
Импорт java.io.file;
Импорт java.io.fileWriter;
импортировать java.util.iterator;
импортировать java.util.list;
импортировать java.util.map;
Импорт org.dom4j.attribute;
Импорт org.dom4j.document;
Импорт org.dom4j.documentException;
Импорт org.dom4j.documentHelper;
Импорт org.dom4j.element;
Импорт org.dom4j.io.outputformat;
Импорт org.dom4j.io.saxReader;
Импорт org.dom4j.io.xmlwriter;
открытый класс testAddeletexml {
частный документ документ;
частная строка FilePath;
// private writelog writelog;
public static void main (string [] args) бросает документы.
// string filePath = System.getProperty ("user.dir")+"/xmlfiles/localservicesconfig.xml";
String filePath = "f: // Java Project // Университетская платформа // demo // gxpt // webcontent // limits // Manager.txt";
TestAdDeletexml Operator = new TestAdDeletExml (filePath);
operator.getxmlfile ();
// map map = new hashmap ();
//map.put("ID "," M1 ");
//map.put("name""module1 ");
//map.put("url "," index1.jsp ");
//operator.addchild("div "," div9 "," Module ",", Map);
//operator.updatechild("style "," "," div "," asdfasdf ", 1);
operator.deletechildone ("style", "", "div", "div11");
//operator.deletechild("div "," div9 "," Module ");
// string str = operator.getchild ("div", "div8", "module");
//System.out.println(str);
// элемент root = document.getRootelement (); // Получить имя корневого узла
}
public TestAdDeletExml (String filePath) {
this.document = null;
this.filePath = filePath;
// writelog = new writelog ();
}
/**
* Создать XML -файл
* @param rootname: имя корневого узла
*/
public void createxmlfile (string rootname) {
if (! fileExist ()) {
this.document = documentHelper.createdocument ();
this.document.addelement (rootname);
savexmlfile (this.document);
}
}
/**
* Получите существующий документ XML
* @возвращаться
*/
публичный документ getXmlfile () {
if (fileExist ()) {
SaxReader Reader = new SaxReader ();
пытаться {
this.document = reader.read (новый файл (filepath));
} catch (documentException e) {
// string loginfo = stacktracetoString.getExceptionTrace (e);
// writeLog.WriteLogtoend ("LocalserverManager", LoginFo);
} окончательно{
reader = null;
}
} еще {
// написание журнала
// string loginfo = "XML -файл не существует, читать ошибку!";
// writeLog.WriteLogtoend ("LocalserverManager", LoginFo);
System.Exit (0);
}
вернуть это.document;
}
/**
* Добавить элементы
* @param Ponepath: имя родительского узла
* @param pathenattr: атрибут родительского узла
* @param childname: имя узла, которое нужно добавить
* @param ChildValue: значение узла, которое будет добавлено
*/
public void AddChild (String Fathernode, String Cathonattr, String ChildName, String ChildValue, Map MAPATTR) {
Childoperator (Fathernode, отец, kildname, childvalue, "Add", mapattr, 0);
}
/**
* Изменить элементы
* @param Ponepath: имя родительского узла
* @param pathenattr: атрибут родительского узла
* @param Childname: имя узла, которое нужно изменить
* @param ChildValue: значение узла, которое нужно изменить
*/
public void updatechild (String fathernode, String watherattr, String ChildName, String childValue, int updateId) {
Childoperator (Fathernode, отец, kildname, ChildValue, «Обновление», NULL, UPDATID);
}
/**
* Удалить элементы
* @param Ponepath: имя родительского узла
* @param pathenattr: атрибут родительского узла
* @param Childname: имя узела, который будет удален
*/
public void deletechild (String fathernode, String choneattr, String Childname) {
Childoperator (Fathernode, отец, kildname, "", "Delete", Null, 0);
}
/**
* Удалить элементы
* @param Ponepath: имя родительского узла
* @param pathenattr: атрибут родительского узла
* @param Childname: имя узела, который будет удален
*/
public void deletechildall (String fathernode, String choneattr, String Childname) {
Childoperator (Fathernode, отец, kildname, "", "deleteall", null, 0);
}
/**
* Удалить элемент
* @param Ponepath: имя родительского узла
* @param pathenattr: атрибут родительского узла
* @param Childname: имя узела, который будет удален
*/
public void deletechildone (String fathernode, String choneattr, String Childname, String childvalue) {
Childoperator (Fathernode, отец, kildname, childvalue, "deleteone", null, 0);
}
/**
* Получите значение элемента
* @param Ponepath: имя родительского узла
* @param pathenattr: атрибут родительского узла
* @param Childname: имя узела, который будет удален
*/
public String getChild (String fathernode, String watherattr, String ChildName) {
String result = "";
result = ChildOperator (Fathernode, Chodattr, ChildName, "", "Get", NULL, 0);
результат возврата;
}
/**
* Операция детского узла
* @param fathernode: имя родительского узла
* @param pathenattr: атрибут родительского узла
* @param Childname: узел, который будет изменен
* @param childvalue: измененное значение узла
* @param оператор: имя операции, которая будет выполнена
*/
Частная синхронизированная строка Childoperator (String fathernode, String wayattr, String childname, String childvalue, String Operator, Map MAPATTR, Int UpdateId) {
String result = "";
if (this.document == null) {
вернуть "null";
}
Элемент root = this.document.getRootelement (); // Получить имя корневого узла
if (! root.getName (). equals (fathernode)) {// Если он не добавлен под корневым узлом
result = xmleLementOperator (корень, FatherNode, отца, kildname, kellvalue, operator, mapattr);
}еще{
if (operator.equals ("добавить")) {
Element ChildElement = root.AddElement (kildName); // Значение атрибута элемента не существует в корневом узле
ChildElement.SetAttributeValue ("id", ChildValue);
savexmlfile (this.document);
} else if (operator.equals ("update")) {
Список детей = root.elements (имя ребенка);
// for (iterator kids = childlements.iterator (); Childs.hasnext ();) {
// элемент всех = (element) Childs.next ();
// walls.settext (ChildValue);
// walls.setattributevalue ("id", childvalue);
Элемент всех = (элемент) ChildElements.get (UpdateId);
все. setattributevalue ("id", childvalue);
//}
savexmlfile (this.document);
} else if (operator.equals ("delete")) {
Список детей = root.elements (kildname); // Получить все дочерние узлы под текущим узлом, судить их значения и изменить их
для (итератора детей = childlements.iterator (); Childs.hasnext ();) {
Элемент всех = (элемент) childs.next ();
Перечислить дети1 = все. Элементы ("Модуль");
for (iterator kids1 = ChildElements1.iterator (); Childs1.hasnext ();) {
Элемент всех1 = (элемент) Childs1.next ();
Все. РЕМОВА (ВСЕ1);
}
}
savexmlfile (this.document);
} else if (operator.equals ("get")) {
Список детей = root.elements (kildname); // Получить все дочерние узлы под текущим узлом, судить их значения и изменить их
для (итератора детей = childlements.iterator (); Childs.hasnext ();) {
Элемент всех = (элемент) childs.next ();
result = everybody.getText ();
}
savexmlfile (this.document);
} else if (operator.equals ("deleteone")) {
Список детей = root.elements (kildname); // Получить все дочерние узлы под текущим узлом, судить их значения и изменить их
для (итератора детей = childlements.iterator (); Childs.hasnext ();) {
Элемент всех = (элемент) childs.next ();
String divelement = every.attributevalue ("id");
if (divelement.equals (kildvalue)) {
root.remove (все);
}
}
savexmlfile (this.document);
} else if (operator.equals ("deleteall")) {
Список детей = root.elements (); // Получить все дочерние узлы под текущим узлом, судить их значения и изменить их
для (итератора детей = childlements.iterator (); Childs.hasnext ();) {
Элемент всех = (элемент) childs.next ();
Список childdiv = everyse.elements ();
for (iterator childrendiv = ChildDiv.iterator (); Childsdiv.hasnext ();) {
Элемент wylyonediv = (element) childsdiv.next ();
Все. Снимите (EnwaneOneiv);
}
}
}
savexmlfile (this.document);
}
результат возврата;
}
/**
* Операция рекурсивного элемента
* @param element: элемент, который будет рекурсивным
* @param fathernode: имя родительского узла
* @param pathenattr: атрибут родительского узла
* @param childname: узел для работы
* @param ChildValue: значение узла после операции
* @param оператор: имя операции, которая будет выполнена
*/
Приватная синхронизированная строка xmlelementemporator (элемент элемента, String fathernode, String wethonttr, String childname, String childvalue, String Operator, Map MAPATTR) {
String result = "";
Список элементов = element.elements ();
for (iterator it = elements.iterator (); it.hasnext ();) {
Element CurrentElement = (element) it.next ();
If (! CurrentElement.getName (). Equals (fathernode)) {// продолжать искать, когда текущий элемент не является родительским элементом, который мы ищем
Xmlelementoperator (CurrentElement, Fathernode, Destaittr, ChildName, ChildValue, Operator, MAPATTR); // Рекурсивный вызов
}еще{
if (currentElement.attributeCount ()> 0) {// Когда текущий элемент имеет значение атрибута, он
for (iterator list = currentelement.attributiaterator (); list.hasnext ();) {// transf значение атрибута
ATTRIBUTE ATTR = (ATTRIBUTE) LIST.NEXT ();
if (attr.getValue (). equals (phaneattr)) {// определить уникальный родительский элемент на основе значения атрибута
if (operator.equals ("добавить")) {// добавить элемент
Element ChildElement = CurrentElement.AddeLement (ChildName);
ChildElement.Settext (ChildValue);
Iterator itmapattr = mapattr.keyset (). Iterator ();
while (itmapattr.hasnext ()) {
String key = (string) itmapattr.next ();
String value = mapattr.get (key) .toString ();
ChildElement.SetAtTributeValue (ключ, значение);
}
// ChildElement.SetAttributeValue ("id", "M1");
// ChildElement.SetAttributeValue ("name", "Module1");
// ChildElement.SetAttributeValue ("url", "index1.jsp");
} else if (operator.equals ("update")) {// изменять элемент
Список детей = currentElement.elements (kildname); // Получить все дочерние узлы под текущим узлом, судить их значения и изменить их
для (итератора детей = childlements.iterator (); Childs.hasnext ();) {
Элемент всех = (элемент) childs.next ();
Все. Settext (ChildValue);
}
} else if (operator.equals ("delete")) {// удалить указанный элемент
Список детей = currentElement.elements (); // Получить все дочерние узлы под текущим узлом, судить их значения и изменить их
для (итератора детей = childlements.iterator (); Childs.hasnext ();) {
Элемент всех = (элемент) childs.next ();
currentElement.remove (все);
}
} else if (operator.equals ("get")) {
Список детей = currentElement.elements (kildname); // Получить все дочерние узлы под текущим узлом, судить их значения и изменить их
для (итератора детей = childlements.iterator (); Childs.hasnext ();) {
Элемент всех = (элемент) childs.next ();
// result = everybody.getText ();
result = все.
}
}
еще{
// написание журнала
// string loginfo = "xmlfile Operator не существует!";
// writeLog.WriteLogtoend ("LocalserverManager", LoginFo);
}
}
}
}
}
}
savexmlfile (this.document);
результат возврата;
}
/**
* Сохранить XML -файл
* @param Document: xml имя файла
*/
private void saipxmlfile (документ документ) {
пытаться {
Outputformat format = outputFormat.createPretTyprint ();
format.setencoding ("UTF-8");
Xmlwriter writer = new XmlWriter (новый файл while (новый файл (filePath)), формат);
writer.write (документ);
writer.close ();
} catch (Exception e) {
// string loginfo = stacktracetoString.getExceptionTrace (e);
// writeLog.WriteLogtoend ("LocalserverManager", LoginFo);
}
}
/**
* Определите, существует ли файл XML.
* @param filename
* @возвращаться
*/
Private Boolean FileExist () {
java.io.file objfile = new java.io.file (this.filepath);
if (objfile.exists ()) {
вернуть истину;
} еще {
вернуть ложь;
}
}
}
XML -файл:
Кода -копия выглядит следующим образом:
<? xml version = "1.0" Encoding = "UTF-8"?>
<style>
<div id = "div8">
<module id = "m1" name = "module1" url = "index1.jsp"/>
<module id = "m2" name = "module2" url = "index2.jsp"/>
<module id = "m3" name = "module3" url = "index3.jsp"/>
</div>
<div id = "div9">
<module id = "m9" name = "module9" url = "index3.jsp"/>
<module id = "m10" name = "module10" url = "index4.jsp"/>
<module id = "m11" name = "module11" url = "index5.jsp"/>
</div>
</style>
Анализ: Здесь мы используем рекурсивный метод, чтобы определить, предназначена ли операция для узла или дочернего узла, что является относительно ясным. Используйте инъекцию зависимости, сохраняет проблемы, если суждение, но я сделал только демонстрацию в то время, без большей оптимизации.
Резюме: На самом деле не сложно читать XML. Чтобы написать много повторений, существует проблема с кодом, которую необходимо изменить неоднократно, поэтому иногда, хотя требования важны, как их реализовать одинаково важно!