主代码:
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import java.io.FileOutputStream;
import java.util.List;
import java.util.Scanner;
public class test {
public static void main(String[] args) throws Exception {
Scanner sc=new Scanner(System.in);
while (true){
System.out.println("请选择您需要领养宠物还是捐献宠物:(领养:1,捐献:2)");
int a=sc.nextInt();
if (a==1){
while (true){
SAXReader reader = new SAXReader();
Document read1 = reader.read("E:\\java\\Java11\\day22\\src\\homework\\hmk3\\pet2.xml");
Element element = read1.getRootElement();
List <Element> elements = element.elements();
System.out.print("请选择您要领养的宠物:");
for (Element e :elements) {
System.out.print(e.getName()+" ");
}
String name = sc.next();//类型
Element element1 = element.element(name);
List <Element>name1 = element1.elements("name");
System.out.print("请选择您要领养的宠物名称:");
for (Element e :name1) {
System.out.print(e.getText()+" ");
}
String name2=sc.next();//名字
Animal animal = new test().getAnimal(name,name2);
System.out.println(animal);
System.out.println("请选择是否继续领养:(true or false)");
boolean b=sc.nextBoolean();
if (b==false){
break;
}
}
}else if (a==2){
System.out.println("请输入您要捐献的宠物种类");
String type=sc.next();
System.out.println("请输入捐献的宠物名称:");
String name=sc.next();
SAXReader reader = new SAXReader();
Document root = reader.read("E:\\java\\Java11\\day22\\src\\homework\\hmk3\\pet2.xml");
Element rootElement = root.getRootElement();
Element element = rootElement.addElement(type);
Element element1 = element.addElement("name");
element1.setText(name);
Element aClass = element.addElement("class");
aClass.setText("homework.hmk3.pet");
OutputFormat prettyPrint = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("E:\\java\\Java11\\day22\\src\\homework\\hmk3\\pet2.xml"),prettyPrint);
xmlWriter.write(root);
xmlWriter.close();
}
}
}
public Animal getAnimal(String name,String name2) throws Exception {
SAXReader reader = new SAXReader();//创建解析
Document read = reader.read("E:\\java\\Java11\\day22\\src\\homework\\hmk3\\pet2.xml");//读取文件路径
Element rootElement = read.getRootElement();//读取根标签
Element element1 = rootElement.element(name);//查找根标签下的子标签名字
String aClass = element1.element("class").getText();//通过名字找到子标签的class
String name1 = element1.element("name").getText();
element1.element("name").getParent().remove(element1.element("name"));
OutputFormat prettyPrint = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("E:\\java\\Java11\\day22\\src\\homework\\hmk3\\pet2.xml"),prettyPrint);
xmlWriter.write(read);
xmlWriter.close();
XMLWriter xmlWriter2 = new XMLWriter(System.out, OutputFormat.createPrettyPrint());
xmlWriter2.write(read);
xmlWriter2.close();
Animal o =(Animal)Class.forName(aClass).newInstance();
o.setaClass(aClass);//传对象名
o.setName(name1);//传路径
return o;
}
}
父类animal:
public class Animal {
public String name;
public String aClass;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getaClass() {
return aClass;
}
public void setaClass(String aClass) {
this.aClass = aClass;
}
@Override
public String toString() {
return "Animal{" +
"name='" + name + '\'' +
", aClass=" + aClass +
'}';
}
}
animal子类,Dog,Elephant,Penguin和Pet
public class Animal {
public String name;
public String aClass;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getaClass() {
return aClass;
}
public void setaClass(String aClass) {
this.aClass = aClass;
}
@Override
public String toString() {
return "Animal{" +
"name='" + name + '\'' +
", aClass=" + aClass +
'}';
}
}
其余animal子类都是照着写
public class Dog extends Animal {
@Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
", aClass='" + aClass + '\'' +
'}';
}
}
下面是xml文件
<?xml version="1.0" encoding="UTF-8"?>
<animal>
<企鹅>
<name>皮皮2</name>
<class>homework.hmk3.Penguin</class>
</企鹅>
<大象>
<name>肉肉</name>
<class>homework.hmk3.Elephant</class>
</大象>
<狗狗>
<name>旺财</name>
<class>homework.hmk3.Dog</class>
</狗狗>
</animal>