电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Java org.w3c.dom.Document 類方法引用報錯

瀏覽:7日期:2023-02-14 09:07:15
org.w3c.dom.Document 類方法引用報錯

The method setXmlVersion(String) is undefined for the type Document

開發時我們可能會碰到這樣的問題,它產生的原因是我們實際需要調用的是 JDK 環境 rt.jar 下的 org.w3c.dom.org.w3c.dom.Document ,但事實上 Eclipse 等 IDE 工具此時自動為我們調用的是 J2EE 中的 xercesxmlParserAPIs2.6.2xmlParserAPIs-2.6.2.jar ,這一點通過 Ctrl 左鍵點擊 Document 類可以發現。

發現問題出在哪里就好解決了

我們需要做的是調整 Eclipse 的調用順序

項目右鍵 > Properties > Java Build Path > 右邊 Order and Export

把 JRE System Library 通過點擊 Up 按鈕放到 J2EE(Maven Dependencies) 的上面即可。

org.w3c.dom(java dom)解析XML文檔

位于org.w3c.dom操作XML會比較簡單,就是將XML看做是一顆樹,DOM就是對這顆樹的一個數據結構的描述,但對大型XML文件效果可能會不理想

首先來了解點Java DOM 的 API:

1.解析器工廠類:DocumentBuilderFactory

創建的方法:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

2.解析器:DocumentBuilder

創建方法:通過解析器工廠類來獲得

DocumentBuilder db = dbf.newDocumentBuilder();

3.文檔樹模型Document

創建方法:a.通過xml文檔 Document doc = db.parse('bean.xml'); b.將需要解析的xml文檔轉化為輸入流 InputStream is = new FileInputStream('bean.xml');

Document doc = db.parse(is);

Document對象代表了一個XML文檔的模型樹,所有的其他Node都以一定的順序包含在Document對象之內,排列成一個樹狀結構,以后對XML文檔的所有操作都與解析器無關,

直接在這個Document對象上進行操作即可;

包含的方法:

Java org.w3c.dom.Document 類方法引用報錯

Java org.w3c.dom.Document 類方法引用報錯

4.節點列表類NodeList

NodeList代表了一個包含一個或者多個Node的列表,根據操作可以將其簡化的看做為數組

Java org.w3c.dom.Document 類方法引用報錯

5.節點類Node

Node對象是DOM中最基本的對象,代表了文檔樹中的抽象節點。但在實際使用中很少會直接使用Node對象,而是使用Node對象的子對象Element,Attr,Text等

6.元素類Element

是Node類最主要的子對象,在元素中可以包含屬性,因而Element中有存取其屬性的方法

Java org.w3c.dom.Document 類方法引用報錯

7.屬性類Attr

代表某個元素的屬性,雖然Attr繼承自Node接口,但因為Attr是包含在Element中的,但并不能將其看做是Element的子對象,因為Attr并不是DOM樹的一部分

基本的知識就到此結束,更加具體的大家可以參閱JDK API文檔

實戰:

1.使用DOM來遍歷XML文檔中的全部內容并且插入元素:

school.xml文檔:

<?xml version = '1.0' encoding = 'utf-8'?><School> <Student><Name>沈浪</Name><Num>1006010022</Num><Classes>信管2</Classes><Address>浙江杭州3</Address><Tel>123456</Tel> </Student> <Student><Name>沈1</Name><Num>1006010033</Num><Classes>信管1</Classes><Address>浙江杭州4</Address><Tel>234567</Tel> </Student> <Student><Name>沈2</Name><Num>1006010044</Num><Classes>生工2</Classes><Address>浙江杭州1</Address><Tel>345678</Tel> </Student> <Student><Name>沈3</Name><Num>1006010055</Num><Classes>電子2</Classes><Address>浙江杭州2</Address><Tel>456789</Tel> </Student></School>

DomDemo.java

package xidian.sl.dom;import java.io.FileOutputStream;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.apache.crimson.tree.XmlDocument;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.NodeList;public class DomDemo { /** * 遍歷xml文檔 * */ public static void queryXml(){try{ //得到DOM解析器的工廠實例 DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); //從DOM工廠中獲得DOM解析器 DocumentBuilder dbBuilder = dbFactory.newDocumentBuilder(); //把要解析的xml文檔讀入DOM解析器 Document doc = dbBuilder.parse('src/xidian/sl/dom/school.xml'); System.out.println('處理該文檔的DomImplementation對象 = '+ doc.getImplementation()); //得到文檔名稱為Student的元素的節點列表 NodeList nList = doc.getElementsByTagName('Student'); //遍歷該集合,顯示結合中的元素及其子元素的名字 for(int i = 0; i< nList.getLength() ; i ++){Element node = (Element)nList.item(i);System.out.println('Name: '+ node.getElementsByTagName('Name').item(0).getFirstChild().getNodeValue());System.out.println('Num: '+ node.getElementsByTagName('Num').item(0).getFirstChild().getNodeValue());System.out.println('Classes: '+ node.getElementsByTagName('Classes').item(0).getFirstChild().getNodeValue());System.out.println('Address: '+ node.getElementsByTagName('Address').item(0).getFirstChild().getNodeValue());System.out.println('Tel: '+ node.getElementsByTagName('Tel').item(0).getFirstChild().getNodeValue()); } }catch (Exception e) { // TODO: handle exception e.printStackTrace();} } /** * 向已存在的xml文件中插入元素 * */ public static void insertXml(){Element school = null;Element student = null;Element name = null;Element num = null;Element classes = null;Element address = null;Element tel = null;try{ //得到DOM解析器的工廠實例 DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); //從DOM工廠中獲得DOM解析器 DocumentBuilder dbBuilder = dbFactory.newDocumentBuilder(); //把要解析的xml文檔讀入DOM解析器 Document doc = dbBuilder.parse('src/xidian/sl/dom/school.xml'); //得到文檔名稱為Student的元素的節點列表 NodeList nList = doc.getElementsByTagName('School'); school = (Element)nList.item(0); //創建名稱為Student的元素 student = doc.createElement('Student'); //設置元素Student的屬性值為231 student.setAttribute('examId', '23'); //創建名稱為Name的元素 name = doc.createElement('Name'); //創建名稱為 香香 的文本節點并作為子節點添加到name元素中 name.appendChild(doc.createTextNode('香香')); //將name子元素添加到student中 student.appendChild(name); /** * 下面的元素依次加入即可 * */ num = doc.createElement('Num'); num.appendChild(doc.createTextNode('1006010066')); student.appendChild(num);classes = doc.createElement('Classes'); classes.appendChild(doc.createTextNode('眼視光5')); student.appendChild(classes);address = doc.createElement('Address'); address.appendChild(doc.createTextNode('浙江溫州')); student.appendChild(address);tel = doc.createElement('Tel'); tel.appendChild(doc.createTextNode('123890')); student.appendChild(tel);//將student作為子元素添加到樹的根節點school school.appendChild(student); //將內存中的文檔通過文件流生成insertSchool.xml,XmlDocument位于crison.jar下 ((XmlDocument)doc).write(new FileOutputStream('src/xidian/sl/dom/insertSchool.xml')); System.out.println('成功');}catch (Exception e) { // TODO: handle exception e.printStackTrace();}} public static void main(String[] args){//讀取DomDemo.queryXml();//插入DomDemo.insertXml(); }}

運行后結果:

Java org.w3c.dom.Document 類方法引用報錯

然后到目錄下查看生成的xml文件:

Java org.w3c.dom.Document 類方法引用報錯

打開查看內容:

Java org.w3c.dom.Document 類方法引用報錯

上面添加元素后輸出的文件與之前的文件不是同一個文件,如果需要輸出到原文件中,那么只要將路徑改為原文間路徑即可:src/xidian/sl/dom/school.xml

2.創建XML過程與插入過程相似,就是Document需要創建

package xidian.sl.dom;import java.io.FileOutputStream;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.apache.crimson.tree.XmlDocument;import org.w3c.dom.Document;import org.w3c.dom.Element;public class CreateNewDom { /** * 創建xml文檔 * */ public static void createDom(){Document doc;Element school,student;Element name = null;Element num = null;Element classes = null;Element address = null;Element tel = null;try{ //得到DOM解析器的工廠實例 DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); //從DOM工廠中獲得DOM解析器 DocumentBuilder dbBuilder = dbFactory.newDocumentBuilder(); //創建文檔樹模型對象 doc = dbBuilder.newDocument(); if(doc != null){//創建school元素school = doc.createElement('School');//創建student元素student = doc.createElement('Student');//設置元素Student的屬性值為231student.setAttribute('examId', '23');//創建名稱為Name的元素name = doc.createElement('Name');//創建名稱為 香香 的文本節點并作為子節點添加到name元素中name.appendChild(doc.createTextNode('香香'));//將name子元素添加到student中student.appendChild(name);/** * 下面的元素依次加入即可 * */num = doc.createElement('Num');num.appendChild(doc.createTextNode('1006010066'));student.appendChild(num);classes = doc.createElement('Classes');classes.appendChild(doc.createTextNode('眼視光5'));student.appendChild(classes);address = doc.createElement('Address');address.appendChild(doc.createTextNode('浙江溫州'));student.appendChild(address);tel = doc.createElement('Tel');tel.appendChild(doc.createTextNode('123890'));student.appendChild(tel);//將student作為子元素添加到樹的根節點schoolschool.appendChild(student);//添加到文檔樹中doc.appendChild(school);//將內存中的文檔通過文件流生成insertSchool.xml,XmlDocument位于crison.jar下((XmlDocument)doc).write(new FileOutputStream('src/xidian/sl/dom/createSchool.xml'));System.out.println('創建成功'); }}catch (Exception e) { // TODO: handle exception e.printStackTrace();} } public static void main(String[] args) {CreateNewDom.createDom(); }}

運行結果:

Java org.w3c.dom.Document 類方法引用報錯

DOM的操作應該還是非常簡單明了的,掌握了沒哦。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 氟塑料磁力泵-不锈钢离心泵-耐腐蚀化工泵厂家「皖金泵阀」 | 健身器材-健身器材厂家专卖-上海七诚健身器材有限公司 | 广州市哲铭油墨涂料有限公司,水性漆生产研发基地 | 微波消解仪器_智能微波消解仪报价_高压微波消解仪厂家_那艾 | 原色会计-合肥注册公司_合肥代理记账公司_营业执照代办 | ★济南领跃标识制作公司★济南标识制作,标牌制作,山东标识制作,济南标牌厂 | 电动球阀_不锈钢电动球阀_电动三通球阀_电动调节球阀_上海湖泉阀门有限公司 | 海外仓系统|国际货代系统|退货换标系统|WMS仓储系统|海豚云 | 净气型药品柜-试剂柜-无管道净气型通风柜-苏州毕恩思 | PVC快速门-硬质快速门-洁净室快速门品牌厂家-苏州西朗门业 | 一体化隔油提升设备-餐饮油水分离器-餐厨垃圾处理设备-隔油池-盐城金球环保产业发展有限公司 | 广州展览制作|展台制作工厂|展览设计制作|展览展示制作|搭建制作公司 | 龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司_龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司 | 青岛空压机,青岛空压机维修/保养,青岛空压机销售/出租公司,青岛空压机厂家电话 | bng防爆挠性连接管-定做金属防爆挠性管-依客思防爆科技 | 超声波清洗机_细胞破碎仪_实验室超声仪器_恒温水浴-广东洁盟深那仪器 | 高考志愿规划师_高考规划师_高考培训师_高报师_升学规划师_高考志愿规划师培训认证机构「向阳生涯」 | 电动高尔夫球车|电动观光车|电动巡逻车|电动越野车厂家-绿友机械集团股份有限公司 | 抖音短视频运营_企业网站建设_网络推广_全网自媒体营销-东莞市凌天信息科技有限公司 | ph计,实验室ph计,台式ph计,实验室酸度计,台式酸度计 | 郑州律师咨询-郑州律师事务所_河南锦盾律师事务所 | 福州甲醛检测-福建室内空气检测_环境检测_水质检测-福建中凯检测技术有限公司 | 精雕机-火花机-精雕机 cnc-高速精雕机-电火花机-广东鼎拓机械科技有限公司 | 运动木地板价格,篮球馆体育运动木地板生产厂家_欧氏地板 | 5L旋转蒸发器-20L-50L旋转蒸发器-上海越众仪器设备有限公司 | 水厂污泥地磅|污泥处理地磅厂家|地磅无人值守称重系统升级改造|地磅自动称重系统维修-河南成辉电子科技有限公司 | 冷却塔风机厂家_静音冷却塔风机_冷却塔电机维修更换维修-广东特菱节能空调设备有限公司 | 上海租车公司_上海包车_奔驰租赁_上海商务租车_上海谐焕租车 | 上海小程序开发-上海小程序制作公司-上海网站建设-公众号开发运营-软件外包公司-咏熠科技 | 冷却塔减速机器_冷却塔皮带箱维修厂家_凉水塔风机电机更换-广东康明冷却塔厂家 | 空心明胶胶囊|植物胶囊|清真胶囊|浙江绿键胶囊有限公司欢迎您! | 自动气象站_农业气象站_超声波气象站_防爆气象站-山东万象环境科技有限公司 | 美名宝起名网-在线宝宝、公司、起名平台| 防水套管厂家_刚性防水套管_柔性防水套管_不锈钢防水套管-郑州中泰管道 | 帽子厂家_帽子工厂_帽子定做_义乌帽厂_帽厂_制帽厂_帽子厂_浙江高普制帽厂 | 千斤顶,液压千斤顶-力良企业,专业的液压千斤顶制造商,shliliang.com | 365文案网_全网创意文案句子素材站 | 存包柜厂家_电子存包柜_超市存包柜_超市电子存包柜_自动存包柜-洛阳中星 | 高效节能电机_伺服主轴电机_铜转子电机_交流感应伺服电机_图片_型号_江苏智马科技有限公司 | 煤棒机_增碳剂颗粒机_活性炭颗粒机_木炭粉成型机-巩义市老城振华机械厂 | 琉璃瓦-琉璃瓦厂家-安徽盛阳新型建材科技有限公司 |