xml:可扩展标记语言
特点:
1.支持多个平台
2.用于数据交互(存数据)
3.任意写标签
优点:
ajax(异步刷新)
框架的配置信息
验证解析器:只能检测到xml的一些语法错误
非验证解析器:一般以dtd开头
xml的解析方式
1.dom(性能不是特别好,(它是首先把dom全部加载出来,再一个个解析))
2.dom4j(对dom的一个封装,对dom的一个优化)
3.sax(数量最大的xml,它是边解析边加载)
dom解析XML
1.把XML文件转化为dom对象
具体步骤
a. DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
// newInstance() 为静态方法 返回一个DocumentBuilderFactory的对象
b. DocumentBuilder db=dbf.newDocumentBuilder();
//调用DocumentBuilderFactory中的newDocumentBuilder()得到一个DocumentBuilder的对象
c. doc=db.parse(new File(path));
//调用DocumentBuilder中的parse(File f) 方法将给定文件的内容解析为XML文档,并返回一个新的DOM Document对象。path指XML文件的存储路径。
2.展示XML里的数据
public void showInfo(){
NodeList nodeList=doc.getElementsByTagName(“Brand”);
for (int i = 0; i < nodeList.getLength(); i++) {
Node nodeBrand=nodeList.item(i);
//把node节点转化为属性节点
Element elementBrand=(Element)nodeBrand;
String name=elementBrand.getAttribute(“name”);
System.out.println(name);
NodeList typeList=elementBrand.getChildNodes();
for (int j = 0; j < typeList.getLength(); j++) {
Node nodeType=typeList.item(j);
if(nodeType.getNodeType()==Node.ELEMENT_NODE){
Element elementType=(Element)nodeType;
String TypeName=elementType.getAttribute(“name”);
System.out.println(TypeName);
}
}
}
}
3.在XML内增加节点
public void add(){
//首先要创建一个节点
Element elementBrand=doc.createElement(“Brand”);
//给其属性赋值
elementBrand.setAttribute(“name”, “oppo”);
//创建一个type节点
Element elementType=doc.createElement(“TypeName”);
elementType.setAttribute(“name”, “oppor17”);
//添加父子关系
elementBrand.appendChild(elementType);
//添加Brand与父节点的关系
doc.getElementsByTagName(“PhoneInfo”).item(0).appendChild(elementBrand);
}
4.保存对XML的更改
public void save(String path){
//将写入dom的数据写入到文件
//得到转化器的工厂
TransformerFactory tff=TransformerFactory.newInstance();
Transformer tf=tff.newTransformer();
DOMSource dSource=new DOMSource(doc);
StreamResult sr=new StreamResult(new OutputStreamWriter(new FileOutputStream(path), “utf-8”));
tf.transform(dSource, sr);
}
5.删除节点信息
public void delete(){
NodeList nodeList=doc.getElementsByTagName(“Brand”);
for (int i = nodeList.getLength()-1; i>=0 ; i–) {
Node nodeBand=nodeList.item(i);
Element elementBrand=(Element)nodeBand;
if(elementBrand.getAttribute(“name”).equals(“苹果”)){
//删除节点,根据父节点来删除子节点
elementBrand.getParentNode().removeChild(elementBrand);
}
}
}
6.给节点添加id
public void addId(){
NodeList nodeList=doc.getElementsByTagName(“Brand”);
for (int i = 0; i < nodeList.getLength(); i++){
Node nodeBand=nodeList.item(i);
Element elementBrand=(Element)nodeBand;
elementBrand.setAttribute(“id”, i+1+"");
}
}
dom4j解析XML
1.获取dom对象
public void getDoc(String path){
SAXReader reader=new SAXReader();
try {
doc=reader.read(new File(path));
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
2.展示所有的信息
public void showInfo(){
//获取根节点
Element element=doc.getRootElement();
Iterator iterator=element.elementIterator();
while(iterator.hasNext()){
Element element2=(Element)iterator.next();
String str=element2.attributeValue(“name”);
System.out.println(str);
//得到子元素的迭代器
Iterator iterator2=element2.elementIterator();
while(iterator2.hasNext()){
Element e=(Element)iterator2.next();
String s=e.attributeValue(“name”);
System.out.println(s);
}
}
}
3.创建节点
public void add(){
//得到根节点
Element rootElement=doc.getRootElement();
//创建一个Brand节点
Element elementBrand=rootElement.addElement(“Brand”);
//设置属性
elementBrand.addAttribute(“name”, “苹果”);
//创建Type节点
Element elementType=elementBrand.addElement(“Type”);
//设置属性
elementType.addAttribute(“name”, “iphoneX”);
}
4.保存对XML的更改
public void save(String path){
try {
FileWriter fileWriter = new FileWriter(path);
//格式化
OutputFormat outputFormat=OutputFormat.createPrettyPrint();
outputFormat.setEncoding(“GBK”);
XMLWriter w=new XMLWriter(fileWriter,outputFormat);
w.write(doc);
w.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
5.删除节点
public void delete(){
Element rootElement=doc.getRootElement();
Iterator iterator=rootElement.elementIterator();
while(iterator.hasNext()){
Element element2=(Element)iterator.next();
String str=element2.attributeValue(“name”);
if(str.equals(“苹果”)){
element2.getParent().remove(element2);
}
}
}
6.修改,增加id
public void update(){
Element rootElement=doc.getRootElement();
Iterator iterator=rootElement.elementIterator();
int i=1;
while(iterator.hasNext()){
Element element2=(Element)iterator.next();
element2.addAttribute(“id”, i+"");
i++;
if(element2.attributeValue(“name”).equals(“华为”)){
element2.setAttributeValue(“name”, “华为荣耀”);
}
}
}
XML文件信息