美文网首页
【XML】XML解析与校验

【XML】XML解析与校验

作者: 小王爱写BUG | 来源:发表于2023-08-09 21:07 被阅读0次

Student

@XmlRootElement(name = "Root")
public class Student {
    private String id;
    private String name;
    private String age;
    private StdClass stdClass;

    @XmlElement(name = "ID")
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }
    @XmlElement(name = "Name")
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    @XmlElement(name = "Age")
    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }
    @XmlElement(name = "StdClass")
    public StdClass getStdClass() {
        return stdClass;
    }

    public void setStdClass(StdClass stdClass) {
        this.stdClass = stdClass;
    }
}

StdClass

public class StdClass {
    private String name;
    private List<Teacher> teacherList;

    @XmlAttribute
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    @XmlElementWrapper(name = "TeacherList")
    @XmlElement(name = "Teacher")
    public List<Teacher> getTeacherList() {
        return teacherList;
    }

    public void setTeacherList(List<Teacher> teacherList) {
        this.teacherList = teacherList;
    }
}

Teacher

public class Teacher {
    private String name;

    @XmlAttribute
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

main

public class TestService {

    public static void main(String[] args) {
        Student student = new Student();
        student.setId(UUID.randomUUID().toString());
        student.setAge("20");
        student.setName("wzd");
        StdClass stdClass = new StdClass();
        stdClass.setName("一班");
        student.setStdClass(stdClass);
        ArrayList<Teacher> teachers = new ArrayList<>();
        Teacher teacher = new Teacher();
        teacher.setName("yxl");
        teachers.add(teacher);
        teachers.add(teacher);
        stdClass.setTeacherList(teachers);
        System.out.println(objToXmlStr(student));
    }
      /**
     * xmlobj 转成 xml String
     * @param object
     * @return
     */
    public static String objToXmlStr(Object object) {
        String resStr = "";
        try {
            JAXBContext jaxbContext = JAXBContext.newInstance(object.getClass());
            Marshaller marshaller = jaxbContext.createMarshaller();
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
            StringWriter stringWriter = new StringWriter();
            marshaller.marshal(object, stringWriter);
            resStr = stringWriter.toString();
            stringWriter.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return resStr;
    }
 /**
     * xml string 转 object
     * @param clazz
     * @param xmlStr
     * @return
     */
    public static Object XmlStrToObj(Class<?> clazz, String xmlStr) {
        Object xmlObj = null;
        Reader reader = null;
        try {
            JAXBContext jaxbContext = JAXBContext.newInstance(clazz);
            Unmarshaller unMarshaller = jaxbContext.createUnmarshaller();
            reader = new StringReader(xmlStr);
            xmlObj = unMarshaller.unmarshal(reader);
            reader.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return xmlObj;
    }
}

results

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Root>
    <Age>20</Age>
    <ID>0d6961c4-f88c-4598-abb4-92a8fbbfdb0b</ID>
    <Name>wzd</Name>
    <StdClass name="一班">
        <TeacherList>
            <Teacher>
                <name>yxl</name>
            </Teacher>
            <Teacher>
                <name>yxl</name>
            </Teacher>
        </TeacherList>
    </StdClass>
</Root>

反射字段校验

 /**
     * 反射校验xml标签、属性
     * @param bean
     * @param str
     */
    public static void checkObjField(Object bean, String str) {
        try {
            Class<?> clazz = bean.getClass();
            Field[] declaredFields = clazz.getDeclaredFields();
            for (Field field : declaredFields) {
                field.setAccessible(true);
                String name = field.getName();
                Object o = field.get(bean);
                Method method = clazz.getMethod("get" + name.substring(0, 1).toUpperCase() + name.substring(1));
                XmlElement xmlElement = method.getAnnotation(XmlElement.class);
                if (xmlElement != null) {
                    if (!str.contains("<" + xmlElement.name()) && !"errorCode".equals(xmlElement.name())) {
                        System.out.println(xmlElement.name() + "标签错误");
                    }
                }

                XmlAttribute xmlAttribute = method.getAnnotation(XmlAttribute.class);
                if (xmlAttribute != null) {
                    if (!str.contains(xmlAttribute.name() + "=")) {
                        System.out.println(xmlAttribute.name() + "属性错误");
                    }
                }

                if (o instanceof List) {
                    List<Object> list = (List) o;
                    for (Object a : list) {
                        checkObjField(a, str);
                    }
                } else if (o instanceof String) {
                    checkObjField(o, str);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

相关文章

  • 面试相关

    1.Json解析与XML解析 Gson解析和FastJson ,FastJson解析效率高 XML解析,SAX解析...

  • iOS解析XML

    2.0 XML解析 2.1 XML简单介绍 (1) XML:可扩展标记语言 (2) XML解析 2.2 XML解析...

  • iOS开发-XML解析

    一、 XML解析 1.1 XML简单介绍 (1) XML:可扩展标记语言 (2) XML解析 1.2 XML解析 ...

  • 3-XML解析

    3.0 XML解析 3.1 XML简单介绍 (1) XML:可扩展标记语言 (2) XML解析 3.2 XML解析...

  • Android xml数据的读取和写入(sax,pull,dom

    一、引用 1、用XmlSerializer写xml文件与读xml文件2、xml解析(读取xml,保存文件到xml)...

  • XML约束——Schema约束

    Schema与DTD XML Schema符合XML语法结构。 DOM、SAX等XML API很容易解析出XML ...

  • 05、网络解析

    解析:从事先规定好的格式中提取数据iOS开发常见的解析:XML解析,JSON解析 XML解析 XMl事例: XML...

  • Java实现XML文件的校验

    XML是常用的数据交换格式和配置文件格式,本文主要讲解对XML文件的解析与校验方法。我们先来看个例子: book....

  • XML、JSON解析

    XML解析 XML_GData解析 JSON解析

  • XML

    NSXMLParser解析XML GDataXML解析XML

网友评论

      本文标题:【XML】XML解析与校验

      本文链接:https://www.haomeiwen.com/subject/wupigrtx.html