贵州建设厅网站备案人员查询,企业网站设计好的缺点有哪些,做一个网站能挣多少钱,怎么在百度上发帖推广一、为什么使用XML
1、便于不同应用程序之间通信。 2、便于不同平台之间通信。 3、便于不同平台之间数据共享。
二、Dom读取
xml文件内容
?xml version1.0 encodingUTF-8?
bookstorebook id1name冰…一、为什么使用XML
1、便于不同应用程序之间通信。 2、便于不同平台之间通信。 3、便于不同平台之间数据共享。
二、Dom读取
xml文件内容
?xml version1.0 encodingUTF-8?
bookstorebook id1name冰与火之歌/nameauthor乔治马丁/authoryear2014/yearprice89/price/bookbook id2name安徒生童话/nameyear2004/yearprice77/pricelanguageEnglish/language/book
/bookstore
dom代码
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;import org.dom4j.Node;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;public class DomReadXml {public static void main(String[] args) {readXml();}public static void readXml() {try {// 创建解析器工厂DocumentBuilderFactory factory DocumentBuilderFactory.newInstance();DocumentBuilder db factory.newDocumentBuilder();// 创建一个Document对象Document doc db.parse(books.xml);NodeList bookList doc.getElementsByTagName(book);// 获取节点个数System.out.println(一共有 bookList.getLength() 本书);// 遍历每个book节点for (int i 0; i bookList.getLength(); i) {System.out.println(*******************************);// 索引从零开始org.w3c.dom.Node book bookList.item(i);// 获取book节点所有属性集合org.w3c.dom.NamedNodeMap attrs book.getAttributes();System.out.println(第 (i 1) 本书共有 attrs.getLength() 属性);// 遍历book属性不知道节点属性和属性名情况for (int j 0; j attrs.getLength(); j) {// 获取某一个属性org.w3c.dom.Node attr attrs.item(j);System.out.print(属性名: attr.getNodeName());System.out.println( --- 属性值: attr.getNodeValue());}// 若已经知道book节点有且只有1个ID属性,可用以下方式// org.w3c.dom.Element e (org.w3c.dom.Element)// bookList.item(i);// System.out.println(Element属性值:e.getAttribute(id));NodeList childNodes book.getChildNodes();for (int k 0; k childNodes.getLength(); k) {// 区分,去掉空格和换行符if (childNodes.item(k).getNodeType() Node.ELEMENT_NODE) {// 获取element类型的节点和节点值System.out.print(节点名 childNodes.item(k).getNodeName());System.out.print( --- 节点值 childNodes.item(k).getFirstChild().getNodeValue());System.out.println( --- 节点值childNodes.item(k).getTextContent());}}}} catch (Exception e) {e.printStackTrace();}}
}
结果输出
三、Dom4j读取
使用dom4j需要导入相关的jar包
import java.io.File;
import java.util.Iterator;
import java.util.List;import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;public class Dom4jReadXml {public static void main(String[] args) {readXml();}public static void readXml(){try {// 创建SAXReader对象SAXReader reader new SAXReader();// 加载xml文件Document dc reader.read(new File(books.xml));// 获取根节点Element e dc.getRootElement();// 获取迭代器Iterator it e.elementIterator();// 遍历迭代器获取根节点信息while(it.hasNext()){Element book (Element) it.next();ListAttribute atts book.attributes();// 获取book属性名和属性值for (Attribute att : atts) {System.out.println(节点名att.getName()节点值att.getValue()); }Iterator itt book.elementIterator();while(itt.hasNext()){Element b (Element) itt.next();System.out.println(属性名b.getName()属性值b.getText());}}} catch (Exception e) {// TODO: handle exception}}}
结果输出
四、JDom读取
使用jdom需要导入相关的jar包
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;public class JDomReadXml {public static void main(String[] args) {// readXml();}SuppressWarnings(unchecked)public static void readXml(){ListBook bList new ArrayListBook();try {// 创建一个SAXBuilder对象SAXBuilder builder new SAXBuilder();// 创建一个输入流InputStream in new FileInputStream(books.xml);// 处理乱码情况InputStreamReader isr new InputStreamReader(in, UTF-8);// 通过build方法将输入流加载到SAXBuilder中Document doc builder.build(isr);// 通过Document对象获取根节点Element foo doc.getRootElement();// 获取根节点下子节点名ListElement allChildren foo.getChildren();// 进行解析for (Element book : allChildren) {Book b new Book();System.out.println(开始解析第(allChildren.indexOf(book)1)本书);// 解析book属性集合ListAttribute attrList book.getAttributes();// 遍历(针对不清楚节点下属性名)for (Attribute attr : attrList) {System.out.println(属性名attr.getName() -- 属性值attr.getValue());if(id.equals(attr.getName())){b.setId(attr.getValue());}}// 清楚知道属性名获取属性值String v book.getAttributeValue(id);System.out.println(清楚知道属性名v);// 对book节点子节点的节点名和节点值进行遍历ListElement bookChiles book.getChildren();for (Element element : bookChiles) {System.out.println(属性名element.getName() -- 属性值element.getValue());if(name.equals(element.getName())){b.setName(element.getValue());}else if(author.equals(element.getName())){b.setAuthor(element.getValue());}else if(year.equals(element.getName())){b.setYear(element.getValue());}else if(price.equals(element.getName())){b.setPrice(element.getValue());}else if(language.equals(element.getName())){b.setLanguage(element.getValue());}}System.out.println(结束解析第(allChildren.indexOf(book)1)本书);bList.add(b);b null;}} catch (Exception e) {e.printStackTrace();}}
}
结果输出
五、Sax读取
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;public class SaxReadXml {public static void main(String[] args) {readXml();}public static void readXml() {try {// 创建工厂SAXParserFactory sfSAXParserFactory.newInstance();// 获取SAXParser实例SAXParser sp sf.newSAXParser();// 创建一个解析对象SAXParserHandler handler new SAXParserHandler();sp.parse(books.xml, handler);for(Book book : handler.getbList()){System.out.println(book.getId());System.out.println(book.getName());System.out.println(book.getAuthor());System.out.println(book.getYear());System.out.println(book.getPrice());System.out.println(book.getLanguage());System.out.println(*****************);}} catch (Exception e) {e.printStackTrace();}}
}
SAXParserHandler .java
import java.util.ArrayList;
import java.util.List;import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;public class SAXParserHandler extends DefaultHandler {int bookIndex 0;String str null;Book b null;private ListBook bList new ArrayListBook();public ListBook getbList() {return bList;}/*** 用来遍历xml文件的开始标签*/Overridepublic void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {// 调用DefaultHandler的startElement方法super.startElement(uri, localName, qName, attributes);// 开始解析book元素属性if(qName.equals(book)){bookIndex;// 创建一个book对象b new Book();System.out.println(****开始第bookIndex本书内容****);// 已知book元素下属性名称根据属性名称获取属性值sString value attributes.getValue(id);System.out.println(book的属性值是value);int num attributes.getLength();for(int i0;inum;i){System.out.print(book元素的第(i1)个属性名是attributes.getQName(i));System.out.println( -- 属性值是attributes.getValue(i));if(attributes.getQName(i).equals(id)){b.setId(attributes.getQName(i));}}}else if(!qName.equals(book) !qName.equals(bookstore)){System.out.print(节点名是qName);}}/*** 用来遍历xml文件的结束标签*/Overridepublic void endElement(String uri, String localName, String qName) throws SAXException {// 调用DefaultHandler的endElement方法super.endElement(uri, localName, qName);// 判断是否针对一本书已经遍历结束if(qName.equals(book)){bList.add(b);b null;System.out.println(****结束第bookIndex本书内容****);}else if(qName.equals(name)){b.setName(str);}else if(qName.equals(author)){b.setAuthor(str);}else if(qName.equals(year)){b.setYear(str);}else if(qName.equals(price)){b.setPrice(str);}else if(qName.equals(language)){b.setLanguage(str);}}/*** 用来标志解析开始*/Overridepublic void startDocument() throws SAXException {// 调用DefaultHandler的startDocument方法super.startDocument();System.out.println(解析开始);}/*** 用来标志解析结束*/Overridepublic void endDocument() throws SAXException {// 调用DefaultHandler的endDocument方法super.endDocument();System.out.println(解析结束);}/*** 用来标志解析结束*/Overridepublic void characters(char[] ch, int start, int length) throws SAXException {// 调用DefaultHandler的characters方法 super.characters(ch, start, length);str new String(ch, start, length);if(!str.trim().equals()){System.out.println( -- 节点值是str);} }}
结果输出
六、附赠properties的读取
在src文件中新建文件dataBase.properties 在文件中写入projectName\u6D4B\u8BD5\u9879\u76EE
public class ReadProperties {public static void main(String[] args){System.out.println(getProjectName());}public static String getProjectName() {Properties pro new Properties();try {// 获取文件内容InputStream cp ReadProperties.class.getResourceAsStream(/dataBase.properties);// 加载pro.load(cp);// 获取projectName属性return pro.getProperty(projectName);} catch (Exception e) {e.printStackTrace();return 出错了;}}
}
结果输出测试项目
七、总结 * dom平台无关官方解析方式一次性加载方便解析代码容易编写当文件过大容易造成内存溢出* sax基于事件驱动的解析方式加载时进行验证判断内存耗费小不易编码很难同时访问一个xml中的多处不同数据* * jdom和dom4j是基于sax扩展* * jdom仅使用具体类而不使用接口api中大量使用了collections类* * dom4j是jdom的一种智能分支具有性能优异灵活性好功能强大和易使用的特点