如何⽣成⼀个XML⽂档在这⾥,简单的介绍⼀下XML,以及如何来⽣成⼀个XML⽂档和怎样解析⼀个XML⽂档。
1.什么是XML
xml指可扩展标记语⾔(EXtensible Markup Language)
xml是以⼀种标记语⾔,很类似HTML
xml的设计宗旨是传输数据,⽽不是显⽰数据
xml标签没有被预定义,需要⾃⾏定义标签
xml被设计为具有⾃我描述性
xml是W3C的推荐标准
2.XML与HTML的差异
xml不是html的替代
xml和html为不同的⽬的⽽设计
xml被设计为传输和存储数据,其焦点是数据的内容
html被设计⽤来显⽰数据,其焦点是数据的外观
html旨在显⽰信息,⽽xml旨在传输信息
XML可以跨语⾔传输数据
3.⼀个规范的XML⽂档
<?xml version="1.0" encoding="UTF-8" ?>
<;班级>
<;学⽣ id="001">
<;姓名>张三</姓名>
<;成绩>
<Math>90</Math>
<English>80</English>
</成绩>
</学⽣>
<!-- 下⾯是第⼆个学⽣的描述 -->
<;学⽣ id="002">
java xml是什么<;姓名>Tom</姓名>
<;成绩>
<Math>95</Math>
<English>78</English>
</成绩>
</学⽣>
</班级>
①.XML⽂档的格式
第⼀⾏是xml⽂档的头⽂件,每个xml⽂档都有这样⼀个头⽂件
encoding值是xml的编码格式
<;班级> 为根元素,其他所有元素都必须包含在根元素内部
<;学⽣>为班级的⼦元素,‘学号’为学⽣的属性
:是xml⽂档中的注释,与html相同
标签必须成对出现
②.XML⽂档的语法规则
⼀个好的语⾔都是有语法规则的,这样,他才能很好的普及。XML语法具有以下的⼏条规则:
所有xml元素都必须有关闭标签
xml标签对⼤⼩写敏感
xml必须正确地嵌套
xml必须有根元素
xml的属性值必须加引号
元素名称不能以数字和"_"(下划线)开头、不能以xml开头、不能包含空格与冒号
html中的转义字符在xml中也可以使⽤,如果⽂本中需要转义的字符太多,还可以使⽤"<![CDATA[需要转义的⽂本]]>"
4.⽣成XML⽂档
XML作为数据的传输语⾔,它能够很好的显⽰数据信息,那么怎样把⼀张表或者⼀个实例对象转换为xml呢?
以User对象为例,使⽤JAXB⽣成User对象的xml:
⾸先,你得有⼀个User对象:
ity;
import java.util.List;
l.bind.annotation.XmlRootElement;
@XmlRootElement    //注解,要想⽣成xml必须得加哦~ ~  切记不要导错了包!!~~
public class User {
private String name;
private int id;
private String password;
private String email;
private List<Message> messageList;
//set和get⽅法
.
.. ...
}
-------------------------------------------------
ity;
public class Message {
private int id;
private String content;    //message的内容
//set和get⽅法
... ...
}
然后,调⽤JAXB的⼀些⽅法⽣成xml,在此之前,别忘了导⼊JAXB的⼀些jar包:
import java.util.ArrayList;
import java.util.List;
l.bind.JAXBContext;
l.bind.Marshaller;
ity.Message;
ity.User;
public class Test {
public static void main(String[] args) throws Exception {
User user = new User();
user.setName("tom");
user.setPassword("123");
Message m1 = new Message();
m1.setId(1);
m1.setContent("tom⽣成了xml");
Message m2 = new Message();
m2.setId(2);
m2.setContent("jack解析了xml");
List<Message> list = new ArrayList<Message>();
list.add(m1);
list.add(m2);
user.setMessageList(list);
JAXBContext ctx = wInstance(User.class);
Marshaller marshaller = ateMarshaller();
marshaller.setProperty(Marshaller.JAXB_ENCODING,"GBK"); //设置xml的编码
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); //让⽣成的xml按规范的格式显⽰  marshaller.marshal(user, System.out); //让xml输出在控制台
}
让我们来看看结果吧:
<?xml version="1.0" encoding="GBK" standalone="yes"?>
<user>
<id>0</id>
<messageList>
<content>tom⽣成了xml</content>
<id>1</id>
</messageList>
<messageList>
<content>jack解析了xml</content>
<id>2</id>
</messageList>
<name>tom</name>
<password>123</password>
</user>
是不是总感觉哪⾥不对劲,如果把id作为属性会不会感觉好点~~~
其实,这个也很简单,就是写⼏⾏注解的事:
把id作为其⽗节点的属性值,在属性的set⽅法上添加注解: @XmlAttribute
给两个messageList添加⼀个⽗节点,在messageList的set⽅法上添加:@XmlElementWrapper(name="Messages") name 的值是给该⽗节点起了名称叫“Messages”
忽略属性,就是在属性的set⽅法上添加:@XmlTransient ,在⽣成的xml⽂档中就不会显⽰该属性
修改标签的名称,在其对应的属性的set⽅法上添加:@XmlElement(name="修改的标签名称"),name的值就是标签修改后的名称
@XmlAttribute        //将id其⽗标签的属性
public void setId(int id) {
this.id = id;
}
... ...
@XmlElement(name="msg")        //将默认的“content”标签改为“msg”
public void setContent(String content) {
}
... ...
@XmlElementWrapper(name="Messages")        //给messageList添加⽗标签,并且命名为“Messages”
public void setMessageList(List<Message> messageList) {
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。