1.xml转义字符
在xml中内置的一些特殊字符,这么特殊字符不能直接被浏览器原样输出,如果想实现原样输出
则要对这些特殊字符进行转义,转义后的字符就叫为转义字符
特殊字符 转义字符
< <
> >
" "
& &
空格
2.xml解析
按原理不同 :
DOM解析
SAX解析
3.xml的解析工具
DOM解析的原理
1) jaxp
2) JDOM工具(非官方)
3) Dom4j工具(非官方)
SAX解析原理:
1)sax解析工具
4.什么是DOM解析
DOM解析的原理:xml解析器一次性把整个xml文档加载进内存,然后再内存中构建一颗Document的文档
对象树,通过Document对象,得到树上的节点对象,通过节点对象访问到xml文档的内容
5.Dom4j工具
使用步骤:
1)导入dom4j的核心包。 dom4j-1.6.1.jar
2)编写Dom4j读取xml文件代码
6.Dom4j读取xml文件
节点:
Iterator Element.nodeIterator();//获取当前标签下的所有子节点
标签:
Element Document.getRootElement();//获取xml文档的根标签
Element Element.element("标签名"); //指定名称下的第一个子标签
Iterator<Element> Element.elementIterator("标签名");//指定名称下的所有的子标签
List<Element> Element.elements(); //获取所有子标签
属性:
String Elemen.attributeValue("属性名称");//获取指定名称的属性值
Attribute Element.attribute("属性名称");//获取指定名称的属性对象
Attribute.getName(); //获取属性名称
Attribute.getValue();//获取属性值
List<Attribute> Element.attributes(); //获取所有属性对象
Iterator<Attribute> Element.attributeIterator(); //获取所有属性对象
文本:
Element.getText();//获取当前标签的文本
Element.elementText("标签名");//获取当前标签的指定名称的子标签的文本内容
7.读取xml
将student.xml文档放到resource下
public static void main(String[] args) throws Exception {
XStreamDemo d = new XStreamDemo();
d.getObjByxml();
}
public void getObjByxml() throws DocumentException{
//创建xml解析器对象
SAXReader reader = new SAXReader();
String path = getClass().getResource("/").getPath()+"student.xml";
Document doc = reader.read(path);
//获取当前节点下的所有子节点 (不含孙节点)
Element ele = doc.getRootElement();//获取跟标签
StringBuilder sb = new StringBuilder();
System.out.println(getObject(ele,sb));
}
public String getObject(Element ele,StringBuilder sb){
sb.append("<"+ele.getName());
List<Attribute> attr = ele.attributes(); //获取所有的属性
if(attr!=null){
for (Attribute attribute : attr) {
sb.append(" "+attribute.getName()+"=\"" +attribute.getValue()+"\""); //获取属性名和属性值
}
}
sb.append(">");
Iterator<Node> it = ele.nodeIterator();//获取标签下的所有节点
while(it.hasNext()) {
Node node = it.next();
if(node instanceof Element) { //如果是标签节点 就递归
Element eles = (Element) node;
getObject(eles,sb);
}
if(node instanceof Text) { //判断是否为文本节点
Text text = (Text) node;
sb.append(text.getText());
}
}
//结束标签
sb.append("</"+ele.getName()+">");
return sb.toString();
}
7.将xml转化为对象
7.1xml文件:
<persons>
<person>
<name>张三</name>
<age>13</age>
<birthday>1992.09.15</birthday>
<gender>男</gender>
<price>2.36</price>
<address>
<province>四川</province>
<city>...</city>
<area>...</area>
</address>
<address>
<province>四川 </province>
<city>...</city>
<area>...</area>
</address>
</person>
</persons>
7.2 Person类
class Person implements Serializable {
private String name ;
private Integer age;
private Date birthday;
private String gender;
private Double price;
private List<Address> address;
//此处省略get set方法
}
7.3 Address类
class Address implements Serializable {
private String province;
private String city;
private String area;
//此处省略get set方法
}
7.4 xml转化为Person对象
public List<Person> getlistperson() throws Exception{
List<Person> ps = new ArrayList<Person>();
//创建xml解析器对象
SAXReader reader = new SAXReader();
String path = getClass().getResource("/").getPath()+"student.xml";
Document doc = reader.read(path);
//获取当前节点下的所有子节点 (不含孙节点)
Element ele = doc.getRootElement();
Iterator<Element> it = ele.elementIterator("person");
while(it.hasNext()) {
Element e = it.next();
Person p = new Person();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd");
p.setName(e.element("name").getText());
p.setAge(Integer.parseInt(e.element("age").getText()));
p.setBirthday(sdf.parse(e.element("birthday").getText()));
p.setGender(e.element("gender").getText());
p.setPrice(Double.parseDouble(e.element("price").getText()));
List<Address> ads = new ArrayList<Address>();
Iterator<Element> addit = e.elementIterator("address");
while(addit.hasNext()) {
Element d = addit.next();
Address add = new Address();
add.setArea(d.element("area").getText());
add.setProvince(d.element("province").getText());
add.setCity(d.element("city").getText());
ads.add(add);
}
p.setAddress(ads);
ps.add(p);
}
return ps;
}