真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

【深入淺出XML】包裝純粹信息的標(biāo)記語言-創(chuàng)新互聯(lián)

XML
  • XML的定義和概述
    • 🎶XML的定義
    • 🎶XML的最好描述
    • 🎶HTML和XML的重要區(qū)別
    • 🎶XML的文檔結(jié)構(gòu)
    • 🎶其他一些標(biāo)記
  • XML和優(yōu)勢(shì)
    • 🎶XML的優(yōu)勢(shì)
  • XML解析
    • 🎶DOM解析
      • ?解析測(cè)試
        • 🤞解析步驟
        • 🤞案例測(cè)試
    • 🎶SAX解析
    • 🎶DOM4J解析
      • ?解析步驟

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡(jiǎn)單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊(cè)、雅安服務(wù)器托管、營(yíng)銷軟件、網(wǎng)站建設(shè)、清河門網(wǎng)站維護(hù)、網(wǎng)站推廣。XML的定義和概述 🎶XML的定義

XMLExtensible Makeup Language的縮寫,是指可拓展性標(biāo)記語言,用來傳輸和存儲(chǔ)數(shù)據(jù)的一種標(biāo)記語言。類似于HTML,XML彌補(bǔ)了HTML不能指定文檔結(jié)構(gòu)的不足,XML被設(shè)計(jì)為具有自我描述性,其宗旨是傳輸數(shù)據(jù)。HTMLXML同宗同源于SGML(標(biāo)準(zhǔn)通用標(biāo)記語言)。

🎶XML的最好描述

獨(dú)立于軟件和硬件的信息傳輸工具。

🎶HTML和XML的重要區(qū)別
  • XML被設(shè)計(jì)來傳輸和存儲(chǔ)數(shù)據(jù),焦點(diǎn)是數(shù)據(jù)的內(nèi)容,而HTML被設(shè)計(jì)來顯示數(shù)據(jù),焦點(diǎn)是數(shù)據(jù)的外觀。
  • XML中區(qū)分大小寫。例如:是不同的標(biāo)簽。
  • XML中的結(jié)束標(biāo)志是絕對(duì)不能省略的,即使是沒有結(jié)束標(biāo)簽也要以'/'結(jié)尾。
  • XML中屬性值必須要用引號(hào)括起來,單引號(hào)雙引號(hào)都行。
  • XML中屬性名不能沒有值。例如:HTML中在XML中是不合法的。
  • XML可以自定義標(biāo)簽和文檔結(jié)構(gòu)。
🎶XML的文檔結(jié)構(gòu)
第一步:使用文檔頭,文檔頭是可選的,但強(qiáng)烈建議使用。
第二步:使用 文檔類型定義(Document Type Definition),用來確保文檔正確的一個(gè)重要機(jī)制,非必須。
...
第三步:寫出根節(jié)點(diǎn),即其內(nèi)部?jī)?nèi)容(子節(jié)點(diǎn),內(nèi)容,屬性...)元素的屬性值一般是對(duì)元素內(nèi)容的解釋。
🎶其他一些標(biāo)記
  • 處理指令,是那些專門在處理XML文檔的應(yīng)用程序中使用的指令,它們由來限定其界限。
  • 實(shí)體引用,使用實(shí)體引用代替一些字符是一種好習(xí)慣。

在這里插入圖片描述

XML和優(yōu)勢(shì) 🎶XML的優(yōu)勢(shì)
1. 解決了屬性文件的局限性,屬性文件是一種平面表結(jié)構(gòu),而XML可以表示層次結(jié)構(gòu);
// 屬性文件內(nèi)容
title.fontname=hhh
title.fontsize=12
menu.item.1=x
menu.item.2=y
// 對(duì)應(yīng)的XML文件內(nèi)容<font>	<name>hhh</name>	<size>12</size></font>xy
XML解析 🎶DOM解析
DOM解析器可以把 xml 文檔轉(zhuǎn)換成樹結(jié)構(gòu),對(duì)其樹結(jié)構(gòu)上的各個(gè)元素進(jìn)行讀取。
DOM解析器的接口已被W3C標(biāo)準(zhǔn)化了,org.w3c.dom包中包含了這些接口的定義。(Document、Element等)。

這是各個(gè)子接口的層次結(jié)構(gòu):

在這里插入圖片描述

?解析測(cè)試 🤞解析步驟
  1. 導(dǎo)入dom依賴(本地庫沒有,可以去中央倉庫找找)

在這里插入圖片描述

  1. 讀入一個(gè)XML文檔,需要一個(gè)DocumentBuilder對(duì)象。
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
  1. 然后開始讀入文檔(可以是File、URL或者某輸入流)
// File(項(xiàng)目根路徑)
Document doc = builder.parse(new File("src/main/....");

// InputStream (類的根路徑)
Document doc = builder.parse(ClassLoader.getSystemClassLoader().getResourceAsStream(...);
  1. 開始解析

一些解析可用的方法:

Document接口
Element getDocumentElement() 返回文檔的根元素。
Element接口:
String getTagName() 返回元素名字
String getAttribute(String name) 返回給定名字的屬性值,沒有該屬性是返回空字符串。
Node接口
NodeList getChildNodes() 返回包含該節(jié)點(diǎn)所有子元素的節(jié)點(diǎn)列表
Node getFirstChild()
Node getLastChild()
CharacterData接口:
String getData() 返回存儲(chǔ)在節(jié)點(diǎn)中的文本。返回的是一個(gè)CharacterData和Text存在繼承關(guān)系,而CharacterData繼承于Node,一般取文本內(nèi)容,是將Node向下轉(zhuǎn)型為Text,再去getData()獲取文本內(nèi)容。
NodeList接口
int getLength() 返回列表中的節(jié)點(diǎn)數(shù)
Node item(int index) 返回索引值處的節(jié)點(diǎn)

🤞案例測(cè)試

一、創(chuàng)建個(gè)xml文件,下面是文件內(nèi)容:

在這里插入圖片描述

二、預(yù)期把這些信息都解析成Javabean Stu對(duì)象,下面是Stu類中的代碼:

import java.util.Objects;
public class Stu {private String name;
    private String sex;
    private int age;

    public Stu(){}

    public Stu(String name, String sex, int age) {this.name = name;
        this.sex = sex;
        this.age = age;
    }

    @Override
    public String toString() {return "Stu{" +
                "name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public boolean equals(Object o) {if (this == o) {return true;
        }
        if (o == null || getClass() != o.getClass()) {return false;
        }
        Stu stu = (Stu) o;
        return age == stu.age && Objects.equals(name, stu.name) && Objects.equals(sex, stu.sex);
    }

    @Override
    public int hashCode() {return Objects.hash(name, sex, age);
    }

    public String getName() {return name;
    }

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

    public String getSex() {return sex;
    }

    public void setSex(String sex) {this.sex = sex;
    }

    public int getAge() {return age;
    }

    public void setAge(int age) {this.age = age;
    }
}

三、通過上面認(rèn)識(shí)到的接口方法,對(duì)該xml文件進(jìn)行解析:

import org.ncpowernode.xml.bean.Stu;
import org.w3c.dom.*;
import org.xml.sax.SAXException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

public class XmlParseStu {private static File f = new File("src/main/resources/stu.xml");
    private static InputStream in = ClassLoader.getSystemClassLoader().getResourceAsStream("stu.xml");
    private static ListstuList = new ArrayList<>();
    public static void main(String[] args)
            throws ParserConfigurationException, IOException, SAXException {DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
        Document stuDocument = documentBuilder.parse(in);
        Element beginRoot = stuDocument.getDocumentElement();
        NodeList childNodes = beginRoot.getChildNodes();
        ListnodeList = new ArrayList<>();

        // 將student 節(jié)點(diǎn)元素存入到nodelist集合中
        for(int i=0;iNode node = childNodes.item(i);
            if (node instanceof Element) {Element element = (Element) node;
                nodeList.add(element);
            }
        }

        //nodeList.stream().forEach(node->System.out.println(node.getNodeName()));
        nodeList.stream()
                .forEach(element ->{NodeList childs = element.getChildNodes();
                    String name="";
                    String sex="";
                    int age=0;
                    for(int i=0;iNode item = childs.item(i);
                        if (item instanceof Element) { Element e = (Element)item;
                            Text text = (Text)item.getFirstChild();
                            String data = text.getData().trim();
                            String tagName = e.getTagName();
                            if(tagName.equals("name")){name = data;
                            }else if(tagName.equals("sex")){sex = data;
                            }else if(tagName.equals("age")){age = Integer.parseInt(data);
                            }
                        }
                    }
                    Stu stu = new Stu(name,sex,age);
                    System.out.println(stu);
                });

    }
}

輸出結(jié)果:

在這里插入圖片描述
注意:這是自編題自解答,同一問題這個(gè)一步一步寫的不一定是一最好的解析代碼。DOM解析xml不適合元素很多的文檔,那樣parse成樹后會(huì)占用很大內(nèi)存。

🎶SAX解析
SAX解析適合解析較大的xml文檔,它是以流的形式進(jìn)行解析,以開始標(biāo)簽與結(jié)束標(biāo)簽作為標(biāo)志,遇到結(jié)束標(biāo)簽后,
執(zhí)行結(jié)束對(duì)應(yīng)的方法后,該元素就會(huì)在內(nèi)存中被清除,不像DOM一樣,解析成樹結(jié)構(gòu)存放于內(nèi)存中隨時(shí)可以訪問。

Tomcat服務(wù)器中用到的Digester事件驅(qū)動(dòng)型工具,即是對(duì)SAX(事件驅(qū)動(dòng)型XML處理工具,已包含到J2SE基礎(chǔ)類庫當(dāng)中)的高層次的封裝,針對(duì)SAX事件提供了更加友好的接口。

缺點(diǎn):只能讀文檔,不可寫。

🎶DOM4J解析 ?解析步驟
  • 一、獲取Document對(duì)象(有三種獲取方法):
  1. 創(chuàng)建解析器對(duì)象,對(duì)XML 文件進(jìn)行解析,獲取Document對(duì)象:
SAXReader saxReader = new SAXReader();
Document testDoc = saxReader.read(ClassLoader.getSystemResource("test.xml"));
  1. 通過DocumentHelper 主動(dòng)去創(chuàng)建Document 對(duì)象:
Document document = DocumentHelper.createDocument();
Element test = document.addElement("test");
  1. 通過DocumentHelper 去解析文本字符串獲取Document 對(duì)象:
String text = "";
Document textDoc = DocumentHelper.parseText(text);
  • 二、通過Document 對(duì)象獲取標(biāo)簽/元素信息,從而進(jìn)行解析。(大部分讀操作都是和DOM一致的)

    一、節(jié)點(diǎn)對(duì)象操作方法
1. 獲取文檔的根節(jié)點(diǎn)
Element root = document.getRootElement();
2. 獲取節(jié)點(diǎn)的文本
String text = node.getText();
String textTrim = node.getTextTrim();
3. 獲取子節(jié)點(diǎn)集
ListnodeList = node.elements("csdn");// 獲取名為csdn的子節(jié)點(diǎn)的所有子節(jié)點(diǎn)
4. 在某個(gè)節(jié)點(diǎn)下添加節(jié)點(diǎn)
Element csdn = node.addElement("csdn");
5. 設(shè)置節(jié)點(diǎn)文本
csdn.setText("假正經(jīng)的小柴");
6. 刪除某個(gè)節(jié)點(diǎn)
parendNode.remove(childNode);
7. 獲取某個(gè)節(jié)點(diǎn)
String xpath = "路徑匹配,比如("/conguration/environments")";
Element element = (Element)document.selectSingleNode(xpath);
二、節(jié)點(diǎn)對(duì)象屬性的方法操作
1.取得某節(jié)點(diǎn)下的某屬性
Attribute attribute = node.attribute("屬性名");
2.設(shè)置屬性值或者添加某屬性值
node.setAttribute(String name,String value);
3.移除某屬性值
node.remove(attribute);
4.獲取所有屬性
NamedNodeMap attributes = node.getAttributes();
5.獲取屬性的文本
String text = attribute.getText();
6.添加某屬性
node.addAttribute(String name,String value);
7.獲取所有屬性
Listattributes = node.attributes();
三、將文檔寫入XML文件
1.文檔中全為英文,不設(shè)置編碼,直接寫入的形式.  
       XMLWriter writer = new XMLWriter(new  FileWriter("ot.xml")); 
       writer.write(document);  
       writer.close();
    2.文檔中含有中文,設(shè)置編碼格式寫入的形式.
       OutputFormat format = OutputFormat.createPrettyPrint();// 創(chuàng)建文件輸出的時(shí)候,自動(dòng)縮進(jìn)的格式                  
       format.setEncoding("UTF-8");//設(shè)置編碼
       XMLWriter writer = new XMLWriter(newFileWriter("output.xml"),format);
       writer.write(document);
       writer.close();
四、字符串和XML的互換
1.將字符串轉(zhuǎn)化為XML
      String text = "Java班";
      Document document = DocumentHelper.parseText(text);
    2.將文檔或節(jié)點(diǎn)的XML轉(zhuǎn)化為字符串.
       SAXReader reader = new SAXReader();
       Document   document = reader.read(new File("csdn.xml"));            
       Element root=document.getRootElement();    
       String docXmlText=document.asXML();
       String rootXmlText=root.asXML();
       Element memberElm=root.element("csdn");
       String memberXmlText=memberElm.asXML();

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧


分享文章:【深入淺出XML】包裝純粹信息的標(biāo)記語言-創(chuàng)新互聯(lián)
URL地址:http://weahome.cn/article/csipch.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部