精华内容
下载资源
问答
  • java XML解析方式实现自动生成word文档,文档中主要描述word模板的使用方法,文件中带有案例代码,可以方便理解
  • JAVA XML转对象 对象转XML

    千次阅读 2018-10-18 11:17:37
    在网上看了许多XML跟Obj互相转换的Demo,但是都很复杂,现在推荐一个极度简单好理解的XML和Obj互转的例子: JacksonXML,只需要简单的几个注解就能完成XML和Obj的相互转换 假设有如下xml报文: <?xml version...

    在网上看了许多XML跟Obj互相转换的Demo,但是都很复杂,现在推荐一个极度简单好理解的XML和Obj互转的例子:

    JacksonXML,只需要简单的几个注解就能完成XML和Obj的相互转换

    假设有如下xml报文:

    <?xml version="1.0" encoding="utf-8"?>
    <msgbody>
      <StringList>
        <mx>
          <paramA>Aone</paramA>
          <paramB>Bone</paramB>
        </mx>
        <mx>
          <paramA>Atow</paramA>
          <paramB>Atow</paramB>
        </mx>
      </StringList>
      <serverId>serv10000000156</serverId>
      <name>张三</name>
      <age>女</age>
      <address>武汉市</address>
    </msgbody>
    

    分析这段报文,首先报文头是 <?xml version="1.0" encoding="utf-8"?>

    然后有<msgbody>标签包住报文体,然后有属性serverId,name,age,address 和 一个列表,列表中的每一个单位用<mx>标签分隔开来,最后每个单位中都有paramA 和 paramB 两个属性。

    准备工作添加pom依赖:

    <dependency>
    	<groupId>com.fasterxml.jackson.dataformat</groupId>
    	<artifactId>jackson-dataformat-xml</artifactId>
    	<version>2.9.0</version>
    </dependency>
    <dependency>
    	<groupId>com.fasterxml.woodstox</groupId>
    	<artifactId>woodstox-core</artifactId>
    	<version>5.1.0</version>
    </dependency>

    那么第一步我们创建与这个报文对应的class:

    package com.symphony.springbootdata.demo.xmlTest;
    
    import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
    import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
    import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
    
    import java.util.List;
    
    /**
     * 报文对应class
     *
     * @author <a href="***@163.com">***</a>
     * @version 1.0.0
     * @since 1.0.0
     * <p>
     * Created at 2018/9/30
     */
    
    @JacksonXmlRootElement(localName = "msgbody")
    public class Person {
        @JacksonXmlProperty(localName = "serverId")
        private String serverId;
        @JacksonXmlProperty(localName = "name")
        private String name;
        @JacksonXmlProperty(localName = "age")
        private String age;
        @JacksonXmlProperty(localName = "address")
        private String address;
        @JacksonXmlElementWrapper(localName = "StringList")
        private List<Clazz> mx;
    
        public Person() {
        }
    
        public Person(String serverId, String name, String age, String address, List<Clazz> mx) {
            this.serverId = serverId;
            this.name = name;
            this.age = age;
            this.address = address;
            this.mx = mx;
        }
    
        public String getServerId() {
            return serverId;
        }
    
        public void setServerId(String serverId) {
            this.serverId = serverId;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getAge() {
            return age;
        }
    
        public void setAge(String age) {
            this.age = age;
        }
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    
        public List<Clazz> getMx() {
            return mx;
        }
    
        public void setMx(List<Clazz> mx) {
            this.mx = mx;
        }
    
        @Override
        public String toString() {
            return "Person{" +
                    "serverId='" + serverId + '\'' +
                    ", name='" + name + '\'' +
                    ", age='" + age + '\'' +
                    ", address='" + address + '\'' +
                    ", mx=" + mx +
                    '}';
        }
    }
    
    package com.symphony.springbootdata.demo.xmlTest;
    
    import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
    import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
    
    /**
     * 报文中列表对应class
     *
     * @author <a href="***@163.com">***</a>
     * @version 1.0.0
     * @since 1.0.0
     * <p>
     * Created at 2018/10/9
     */
    @JacksonXmlRootElement(localName = "MX")
    public class Clazz {
        @JacksonXmlProperty(localName = "paramA")
        private String a;
        @JacksonXmlProperty(localName = "paramB")
        private String b;
    
        public String getA() {
            return a;
        }
    
        public void setA(String a) {
            this.a = a;
        }
    
        public String getB() {
            return b;
        }
    
        public void setB(String b) {
            this.b = b;
        }
    
        @Override
        public String toString() {
            return "Clazz{" +
                    "a='" + a + '\'' +
                    ", b='" + b + '\'' +
                    '}';
        }
    }
    

    创建好对应的class之后,开始XML与Obj的转换

    package com.symphony.springbootdata.demo.xmlTest;
    
    import com.fasterxml.jackson.core.JsonProcessingException;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.fasterxml.jackson.dataformat.xml.XmlMapper;
    import org.junit.Test;
    
    import javax.xml.bind.JAXBException;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * XML Obj 互相转换
     *
     * @author <a href="mailto:***@163.com">***</a>
     * @version 1.0.0
     * @since 1.0.0
     * <p>
     * Created at 2018/9/30
     */
    public class ObjToXmlUtils {
    
        public static void main(String[] args) throws JsonProcessingException {
            List<Clazz> mx = new ArrayList<>();
            Clazz clazz = new Clazz();
            clazz.setA("Aone");
            clazz.setB("Bone");
            mx.add(clazz);
            clazz = new Clazz();
            clazz.setA("Atow");
            clazz.setB("Atow");
            mx.add(clazz);
    
            ObjectMapper mapper = new XmlMapper();
            String s = mapper.writeValueAsString(new Person("serv10000000156", "张三", "女", "武汉市", mx));
            System.out.println("<?xml version=\"1.0\" encoding=\"utf-8\"?>" + s);
        }
    
        @Test
        public void xmlToObj() throws JAXBException, IOException {
            String xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><msgbody><StringList><mx><paramA>Aone</paramA><paramB>Bone</paramB></mx><mx><paramA>Atow</paramA><paramB>Atow</paramB></mx></StringList><serverId>serv10000000156</serverId><name>张三</name><age>女</age><address>武汉市</address></msgbody>\n";
            ObjectMapper mapper = new XmlMapper();
            Object po = null;
            po = mapper.readValue(xml, Person.class);
            System.out.println(po.toString());
        }
    }
    

    综上,我们看到了注解

     @JacksonXmlElementWrapper:指定用于包装List和Map属性的XML元素
     @JacksonXmlProperty:为属性指定XML名称空间和本地名称; 以及是否将属性写为XML元素或属性
     @JacksonXmlRootElement:指定用于包装根元素的XML元素
     @JacksonXmlText:指定当前这个值,没有xml标签包裹

    展开全文
  • Java xml数据格式返回实现

    千次阅读 2019-03-23 11:47:51
    前言:对于服务器后端开发,...使用@RequestBody实现Java对象和XML/JSON数据自动转换 很多人会认为接口方法使用@Controller搭配@ResponseBody和@RequestMapping注解后,java对象会转换成json格式返回。 但实际上配...

    前言:对于服务器后端开发,接口返回的数据格式一般要求都是json,但是也有使用xml格式

    RequestBody注解

    对于SpringMVC,很多人会认为接口方法使用@Controller搭配@ResponseBody和@RequestMapping注解后,java对象会转换成json格式返回。

    但实际上配合@ResponseBody注解后,接口返回的数据类型是根据HTTP Request Header中的Accept属性来确定的,可以是XML或者JSON数据

    通过适当的HttpMessageConverter对java对象进行格式转换,常用的有:

    1. ByteArrayHttpMessageConverter: 负责读取二进制格式的数据和写出二进制格式的数据;
    2. StringHttpMessageConverter: 负责读取字符串格式的数据和写出二进制格式的数据;
    3. ResourceHttpMessageConverter:负责读取资源文件和写出资源文件数据;
    4. FormHttpMessageConverter: 负责读取form提交的数据;
    5. MappingJacksonHttpMessageConverter: 负责读取和写入json格式的数据;
    6. SouceHttpMessageConverter:负责读取和写入 xml 中javax.xml.transform.Source定义的数据;
    7. Jaxb2RootElementHttpMessageConverter: 负责读取和写入xml 标签格式的数据;
    8. AtomFeedHttpMessageConverter: 负责读取和写入Atom格式的数据;
    9. RssChannelHttpMessageConverter: 负责读取和写入RSS格式的数据

    具体使用哪个怎么判断这里就不细讲了,我们关心的是Jaxb2RootElementHttpMessageConverter这个方法,后面会讲为啥会提

    java对象与xml之间互相转换

    使用Java自带注解的方式实现(@XmlRootElement,@XmlAccessorType,@XmlElement,@XmlAttribute),具体使用方法网上有很多

    这里直接代码举例

    import javax.xml.bind.annotation.XmlElement;
    import javax.xml.bind.annotation.XmlRootElement;
    import javax.xml.bind.annotation.XmlType;
    
    @XmlRootElement(name = "city")
    @XmlType(propOrder = { "name","province"})
    public class City {
        private String name;
        private String province;
    
        public City() {
        }
    
        public City(String name, String province) {
            this.name = name;
            this.province = province;
        }
    
        public String getName() {
            return name;
        }
    
        @XmlElement
        public void setName(String name) {
            this.name = name;
        }
    
        public String getProvince() {
            return province;
        }
    
        @XmlElement
        public void setProvince(String province) {
            this.province = province;
        }
    }
    

    controller

    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    @Controller
    public class IndexController {
    
        @RequestMapping(path = "/get")
        @ResponseBody
        public City getXml(){
            City city= new City("太原","山西");
            return city;
        }
    }
    

    请求http://localhost:8080/get 返回结果如下
    在这里插入图片描述
    是不很容易就实现接口返回xml格式

    使用<![CDATA[]]>

    对象属性中有可能存在计算逻辑’<‘或’>’,而在xml文件中这两个符号是不合法的,会转换为&lt和&gt,这样数据就’坏’了,所以<![CDATA[]]>的加入是非常有必要的!

    一般实现:使用XmlAdapter定义一个CDataAdapter类,网上也有很多代码

    大概的实现如下

    public class CDataAdapter extends XmlAdapter<String, String> {
     
        @Override
        public String unmarshal(String v) throws Exception {
        	// 我们这里没有xml转java对象,这里就不具体实现了
            return v;
        }
     
        @Override
        public String marshal(String v) throws Exception {
            return new StringBuilder("<![CDATA[").append(v).append("]]>").toString();
        }
     
    }
    

    然后使用注解XmlJavaTypeAdapter作用于属性变量上

    
    	@XmlJavaTypeAdapter(value=CDataAdapter.class)
        @XmlElement
        public void setProvince(String province) {
            this.province = province;
        }
        
    

    结果

    在这里插入图片描述
    但是实际上看源码
    在这里插入图片描述
    这个不是我们希望的,产生原因是Jaxb默认会把字符’<’, '>'进行转义, 下面解决这个问题

    我们使用org.eclipse.persistence.oxm.annotations.XmlCDATA注解来解决

    使用EclipseLink JAXB (MOXy)

    pom文件增加

    <dependency>
        <groupId>org.eclipse.persistence</groupId>
        <artifactId>org.eclipse.persistence.moxy</artifactId>
        <version>xx版本</version>
    </dependency>
    

    上一节中的属性使用注解

    ...
    import org.eclipse.persistence.oxm.annotations.XmlCDATA;
    
        ...
        ...
    	@XmlCDATA  
        @XmlElement
        public void setProvince(String province) {
            this.province = province;
        }
    

    注意:一定要设置jaxb.properties文件,并且要放在要转换成xml的java对象所在目录,并且要编译到target中,不然XmlCDATA注解不生效

    jaxb.properties文件内容,就是指定创建JAXBContext对象的工长

    javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
    
    

    到这里配置完成

    展开全文
  • java xml转换为String

    千次阅读 2019-01-03 22:50:00
    public class XmltoJsonUtil { public static String xml2JSON(String xml) { JSONObject obj = new JSONObject(); try { InputStream is = new ByteArrayInputStream(xml.getBy...

    public class XmltoJsonUtil {
    public static String xml2JSON(String xml) {
    JSONObject obj = new JSONObject();
    try {
    InputStream is = new ByteArrayInputStream(xml.getBytes("utf-8"));
    SAXBuilder sb = new SAXBuilder();
    Document doc = sb.build(is);
    Element root = doc.getRootElement();
    obj.put(root.getName(), iterateElement(root));
    return obj.toString();
    } catch (Exception e) {
    e.printStackTrace();
    return null;
    }
    }

    }

    转载于:https://www.cnblogs.com/qqzhulu/p/10217416.html

    展开全文
  • java xml与实体类转换

    千次阅读 2018-01-05 16:07:33
    @XmlRootElement注解定义xml的根节点 通过name改变根节点的xml值  @XmlRootElement(name = "amimal_test") @XmlType注解 指定序列生成的xml节点顺序  @XmlType(propOrder={"id","age","name","bir

    @XmlRootElement注解定义xml的根节点 通过name改变根节点的xml值

                        @XmlRootElement(name = "amimal_test")

    @XmlType注解 指定序列生成的xml节点顺序

                     @XmlType(propOrder={"id","age","name","birthDay","list","person","map"})
                    @XmlType的propOrder 属性时,必须列出JavaBean对象中的所有属性【是javaBean里面的属性 跟XmlElement的name设置无关】,否则会报错
    @XmlAccessorOrder注解 指定生成xml节点的方式  默认是XmlAccessorOrder.UNDEFINED无序 还可设置XmlAccessorOrder.ALPHABETICAL按照属性的字母排序
    注意:  @XmlType(propOrder和@XmlAccessorOrder同时存在时 以@XmlType(propOrder为准

    @XmlAccessorType 用于指定由java对象生成xml文件时对java对象属性的访问方式。
                常与@XmlRootElement、@XmlType一起使用。它的属性值是XmlAccessType的4个枚举值, 分别为:

                                XmlAccessType.FIELD:java对象中的所有成员变量
                                XmlAccessType.PROPERTY:java对象中所有通过getter/setter方式访问的成员变量
                                XmlAccessType.PUBLIC_MEMBER:java对象中所有的public访问权限的成员变量和通过getter/setter方式访问的成员变量
                                XmlAccessType.NONE:java对象的所有属性都不映射为xml的元素

      注意:@XmlAccessorType的默认访问级别是XmlAccessType.PUBLIC_MEMBER,
    因此,如果java对象中的private成员变量设置了public权限的getter/setter方法,就不要在private变量上使用@XmlElement和@XmlAttribute注解,
    只能在getter/setter方法上使用@XmlElement和@XmlAttribute注解,否则由java对象生成xml时会报同一个属性在java类里存在两次的错误。
    同理,如果@XmlAccessorType的访问权限为XmlAccessType.NONE,如果在java的成员变量上使用了

    @XmlElement或@XmlAttribute注解,这些成员变量依然可以映射到xml文件。

    @XmlTransient用于标示在由java对象映射xml时,忽略此属性,在生成的xml文件中不出现此元素。

    @XmlAttribute:该属性作为类xml节点的attribute

     @XmlElement:该属性作为xml的element,且可以增加属性(name="NewElementName"),那么生成的xml串的elment的标签是NewElementName

     @XmlElementWrapper 修改节点的名字


    修改xml的namespace 需要再package-info.java文件中添加注解

    @XmlSchema(
    namespace="http://hyj.cn",
    elementFormDefault=XmlNsForm.QUALIFIED)

    package com.hyj.xml;
    import javax.xml.bind.annotation.*;


     @XmlJavaTypeAdapter
    JAXB能够内置支持List和Set集合,但是对于Map的支持需要自己处理
    继承自抽象类XmlAdapter<ValueType,BoundType> 重写marshal和unmarshal的方法
    类型参数:
        BoundType - JAXB 不知道如何处理的一些类型。编写一个适配器,以便允许通过 ValueType 将此类型用作内存表示形式。
        ValueType - JAXB 无需其他操作便知道如何处理的类型。


    展开全文
  • java xml增删改查多种方法

    热门讨论 2010-02-05 22:32:15
    java写的关于xml文档的解析,有关增删改查全方面的操作,而且有多种不同的方法
  • Java xml格式化工具

    千次阅读 2017-05-22 10:11:07
    Java xml格式化工具Java 实现xml格式化工具代码地址: https://github.com/xiaxveliang/JavaTool_XmlValidate运行效果点击“乘1.5”按钮后的运行效果
  • Java xml字符串转json

    千次阅读 2019-04-12 15:23:21
    Java xml字符串转json import net.sf.json.xml.XMLSerializer; import net.sf.json.JSONArray; import net.sf.json.JSONObject; { ... String xml;//假设为xml字符串 XMLSerializer xmlSerializer = new XM.....
  • 如题,跪求java如何将xml转成word啊啊啊崩溃中,弄了两天了没弄出来,我也是笨的不行
  • java xml api 简单使用例子

    千次阅读 2016-02-21 21:03:14
    java xml api 简单使用例子 主要步骤: 1、创建 DocumentBuilderFactory 对象 2、读取文档,得到文档对象 Document 3、解析xml元素,比如 doc.getElementsByTagName() java jdk 自带的 xml 解析方式是w3c...
  • Java XML

    千次阅读 2014-04-28 16:32:59
    XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便。 XML相关知识: 结构: DOM(Document Object Model) 定义: DTD(文档类型定义)的作用是...
  • java xml与实体对象 互相转换

    万次阅读 2017-02-23 19:51:07
    最近在项目中一直出现Java对象和XML之间的相互转换,一开始由于项目很庞大,我又是临时调度过去,导致在按照项目组长的要求进行写代码的同时,总是在这块云里雾里,最近才慢慢开始搞清楚项目中具体的使用缘由。...
  • JAVA XML转JSON简单实现(dom4j)

    千次阅读 2017-10-25 15:27:59
    JAVA XML 转 JSON 简单实现(dom4j)
  • java 通过模板生成 xml

    热门讨论 2014-03-28 11:34:44
    java 通过xml模板生成 xml文件
  • 为啥在xml转json的时候,转后json属性前会有"@"符号,怎么去掉? 代码如下 ``` XMLSerializer xmlSerializer = new XMLSerializer(); JSON json = xmlSerializer.read(xmlString); return json....
  • java XML转JSON格式

    万次阅读 2014-05-20 20:55:07
    代码如下所示 import java.io.ByteArrayInputStream;...import java.io.File;...import java.io.InputStream;...import java.util.HashMap;...import java.util.LinkedList;...import java.util.List;...import java.util.Map
  • JavaXML重点总结

    千次阅读 2018-08-12 22:49:32
    XML简介: XML(EXtensible Markup Language),可扩展标记语言 特点: XML与操作系统、编程语言的开发平台都无关【通用的数据交换格式】 实现不同系统之间的数据交换【包括系统的配置文件】 是一种标记语言,...
  • java http 发送xml报文

    热门讨论 2011-09-07 23:07:34
    java http 发送xml报文java http 发送xml报文java http 发送xml报文java http 发送xml报文java http 发送xml报文java http 发送xml报文java http 发送xml报文java http 发送xml报文java http 发送xml报文java http ...
  • Java xml 添加节点

    千次阅读 2013-07-18 15:46:35
    通过java操作生成xml节点的文件test.java,文件内容: package com.pb.test; import java.io.FileOutputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.Docum
  • 1 XML基础 1)XML的作用 1.1 作为软件配置文件 1.2 作为小型的“数据库” 2)XML语法(由w3c组织规定的) 标签: 标签名不能以数字开头,中间不能有空格,区分大小写。有且仅有一个根标签。 属性: 可有多个属性,...
  • JAXB完成XMLJava对象的互转

    热门讨论 2014-06-16 14:23:30
    JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例...
  • java生成xsd,xml示例

    热门讨论 2014-04-17 10:20:29
    java生成xsd,xml示例
  • java xml格式化输出

    千次阅读 2012-05-24 18:45:28
    import java.io.IOException; import java.io.StringWriter; import org.dom4j.Document; import org.dom4j.io.OutputFormat;...import org.dom4j.io.XMLWriter; public class DebugUtil { public static String f
  • java xml 加注释和取消注释快捷键

    千次阅读 2017-12-08 12:11:39
    eclipse中编辑Java文件时,注释和取消注释的快捷键都是: "CTRL + / " 编辑xml文件时, 注释:CTRL + SHIFT + / 取消注释:CTRL + SHIFT + \
  • Java xml节点属性的修改

    千次阅读 2012-06-27 18:18:21
    Java xml节点属性的修改 修改xml节点的属性,我们先建立一个修改之前的xml文档: 操作xml文档的java程序文件test.java package com.pb.test; import java.io.FileOutputStream; import javax.xml....
  • java读取xml文件导入到mysql数据库中

    热门讨论 2013-08-30 12:33:25
    xml文件导入到mysql数据库中,包括文件:ConnectionUtils.java,InsertDT.java,db_mysql.properties,test01.xml,需要的jar包dom4j-1.6.1.jar,mysql-connection-java-3.1.1.3-bin.jar,jaxen-1.1-beta-7.jar
  • JavaXML映射利器

    千次阅读 2017-12-23 14:14:35
    JavaXML映射利器熟悉Hibernate的朋友都知道,它可以把Java类和数据库表进行映射,通过操作Java对象的方式可以对表记录进行更新。这可以大大增加我们的开发效率,免去自己直接通过JDBC操作数据库表的繁琐过程。其实...
  • Java解析XML工具类--(java源码)

    热门讨论 2010-01-14 18:46:59
    import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; /** * 本类是专门解析...
  • Java生成XML格式

    千次阅读 2019-06-27 17:49:48
    <?xml version="1.0" encoding="utf-8"?> 张三 <password>123456 代码如下: Document document = DocumentHelper.createDocument(); //创建根节点 Element root = document.addElement("root"); //...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,065,021
精华内容 826,008
关键字:

javaxml

java 订阅