国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

簡單談?wù)刣om解析xml和html

2019-11-14 21:11:35
字體:
供稿:網(wǎng)友
簡單談?wù)刣om解析xml和html前言

文件對(duì)象模型(Document Object Model,簡稱DOM),是W3C組織推薦的處理可擴(kuò)展標(biāo)志語言的標(biāo)準(zhǔn)編程接口。html,xml都是基于這個(gè)模型構(gòu)造的。這也是一個(gè)W3C推出的標(biāo)準(zhǔn)。java,python,javascript等語言都提供了一套基于dom的編程接口。

java使用dom解析xml

一段xml文檔, note.xml:

<?xml version="1.0" encoding="UTF-8"?><note>    <to id="1">George</to>    <from>John</from>    <heading>Reminder</heading>    <body>Don't forget the meeting!</body></note>

我們先使用w3c dom解析該xml:

@Testpublic void test() {    NodeList nodeList = doc.getChildNodes().item(0).getChildNodes();    System.out.PRintln("xml size: " + nodeList.getLength());    for(int i = 0; i < nodeList.getLength(); i ++) {        Node node = nodeList.item(i);        System.out.println(node.getNodeType());        System.out.println(node.getNodeName());    }}

輸出:

xml size: 93#text1to3#text1from3#text1heading3#text1body3#text

我們看到代碼輸出note節(jié)點(diǎn)的字節(jié)點(diǎn)的時(shí)候,有9個(gè)節(jié)點(diǎn),但是xml文檔中note節(jié)點(diǎn)實(shí)際上只有to、from、heading、body4個(gè)節(jié)點(diǎn)。 那為什么是9個(gè)呢,原因是這樣的。選取幾個(gè)w3c規(guī)范中關(guān)于節(jié)點(diǎn)類型的描述:

節(jié)點(diǎn)類型描述nodeName返回值nodeValue返回值子元素類型常量值
Document表示整個(gè)文檔(DOM 樹的根節(jié)點(diǎn))#documentnullElement(max. one),Comment,DocumentType9
Element表示 element(元素)元素element namenullText,Comment,CDATASection1
Attr表示屬性屬性名稱屬性值Text2
Text表示元素或?qū)傩灾械奈谋緝?nèi)容。#text節(jié)點(diǎn)內(nèi)容None3
CDATASection表示文檔中的 CDATA 區(qū)段(文本不會(huì)被解析器解析)#cdata-section節(jié)點(diǎn)內(nèi)容None4
Comment表示注釋#comment注釋文本None8

更多細(xì)節(jié)請(qǐng)查看w3c DOM節(jié)點(diǎn)類型

下面解釋一下文檔節(jié)點(diǎn)的字節(jié)點(diǎn)的處理過程:

其中紅色部分為Text節(jié)點(diǎn),紫色部分是Element節(jié)點(diǎn)(只畫了部分)。</body>后面的也是一個(gè)Element節(jié)點(diǎn),所有4個(gè)Element節(jié)點(diǎn),5個(gè)Text節(jié)點(diǎn)。

所以輸出的內(nèi)容中3 #text表示該節(jié)點(diǎn)是個(gè)Text節(jié)點(diǎn),1 節(jié)點(diǎn)name是個(gè)Element節(jié)點(diǎn),這與表格中表述的是一樣的。

測試代碼:

@Testpublic void test1() {    NodeList nodeList = doc.getChildNodes().item(0).getChildNodes();    System.out.println("xml size: " + nodeList.getLength());    for(int i = 0; i < nodeList.getLength(); i ++) {        Node node = nodeList.item(i);        if(node.getNodeType() == Node.TEXT_NODE) {            System.out.println(node.getNodeValue().replace("/n","hr").replace(' ', '-'));        }    }}

很明顯,我們把空格和回車鍵替換打印后發(fā)現(xiàn)我們的結(jié)論是正確的。

測試代碼:

@Testpublic void test2() {    System.out.println("doc type: " + doc.getNodeType());    NodeList nodeList = doc.getChildNodes().item(0).getChildNodes();    Node secondNode = nodeList.item(1);    System.out.println("element [to] node type: " + secondNode.getNodeType());    System.out.println("element [to] node name: " + secondNode.getNodeName());    System.out.println("element [to] node value: " + secondNode.getNodeValue());    System.out.println("element [to] children len: " + secondNode.getChildNodes().getLength());    System.out.println("element [to] children node type: " + secondNode.getChildNodes().item(0).getNodeType());    System.out.println("element [to] children node value: " + secondNode.getChildNodes().item(0).getNodeValue());    System.out.println("element [to] children node name: " + secondNode.getChildNodes().item(0).getNodeName());    Node attNode = secondNode.getAttributes().item(0);    System.out.println("attr type: " + attNode.getNodeType());}

輸出結(jié)果跟表格中是一樣的。

大家有興趣的話其他類型的節(jié)點(diǎn)比如CDATA節(jié)點(diǎn)大家可以自行測試~

Javascript使用dom解析html

html代碼:

<!DOCTYPE html><html><head>  <meta charset="utf-8">  <title>JS Bin</title></head><body>  <div>    <p>gogogo</p>  </div></body></html>

js代碼:

console.log(document.nodeType);var div = document.getElementsByTagName("div")[0]; //9console.log(div.nodeType); //1for(var i = 0;i < div.childNodes.length; i ++) {  console.log(div.childNodes[i].nodeType);}

分別輸出9,1,3,1,3跟我們?cè)诒砀裰袑?duì)應(yīng)~

總結(jié)

本次博客主要講解了dom解析xml和html。 以前使用java解析xml的時(shí)候總是使用一些第三方庫,比如jdom。 但是dom卻是w3c的規(guī)范,不止java,包括javascript,python這些主流語言也都主持,有了規(guī)范,語言只是實(shí)現(xiàn)了這些規(guī)范而已。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 疏附县| 若尔盖县| 康乐县| 都兰县| 澄迈县| 孟津县| 金沙县| 大荔县| 佛学| 昌图县| 尼勒克县| 湘潭县| 怀柔区| 临漳县| 石景山区| 商水县| 桑植县| 青川县| 卢湾区| 思南县| 象山县| 东光县| 安龙县| 三穗县| 黄龙县| 馆陶县| 伊吾县| 连州市| 林周县| 湖南省| 泗阳县| 论坛| 乐山市| 克什克腾旗| 高要市| 扶余县| 黎川县| 江都市| 军事| 青川县| 太白县|