xml解析

来源:互联网 发布:win10桌面管理软件 mac 编辑:程序博客网 时间:2024/05/10 03:12
xml创建:ublic class CreateXMl {public static void main(String[] args) throws Exception{List<BookDemo> books = new ArrayList<BookDemo>();for (int i = 0; i <3; i++) {BookDemo bookDemo = new BookDemo();bookDemo.setName("电脑"+i);bookDemo.setNum(300+i);bookDemo.setPrice(40.0+i);bookDemo.setSi("000"+i);books.add(bookDemo);}createDocument(books);}public static void createDocument(List<BookDemo> list)throws Exception{DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();Document document = documentBuilder.newDocument();//设置小毛驴的版本document.setXmlVersion("1.0");//xml是否可以单独存在document.setXmlStandalone(true);//向xml中添加根节点Element elementRoot = document.createElement("books");document.appendChild(elementRoot);for (BookDemo bookDemo : list) {//创建book节点Element elementBook = document.createElement("book");elementBook.setAttribute("si", bookDemo.getSi());elementRoot.appendChild(elementBook);//创建Name节点Element elementName = document.createElement("name");elementName.setTextContent(bookDemo.getName());elementBook.appendChild(elementName);//创建price节点Element elementPrice = document.createElement("price");elementPrice.setTextContent(bookDemo.getPrice().toString());elementBook.appendChild(elementPrice);//创建num节点Element elementNum = document.createElement("num");elementNum.setTextContent(bookDemo.getNum().toString());elementBook.appendChild(elementNum);}TransformerFactory transformerFactory = TransformerFactory.newInstance();Transformer transformer = transformerFactory.newTransformer();Source xmlSource = new DOMSource(document);//Result outputTarget = new StreamResult(new File("D:\\JavaProject\\itCast\\src\\main\\com\\itcast\\MyFiles.xml"));Result outputTarget = new StreamResult(new OutputStreamWriter(new FileOutputStream(new File("D:\\JavaProject\\itCast\\src\\main\\com\\itcast\\MyFiles.xml")),"UTF-8"));transformer.transform(xmlSource, outputTarget);} }xml操作:public class XMLOpreraor {/** * 读取xml文件中的数据,返回对象形式的list *  */public List<BookDemo> list() throws Exception{List<BookDemo> list = new ArrayList<BookDemo>();DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();Document document = documentBuilder.parse(new File("D:\\JavaProject\\itCast\\src\\main\\com\\itcast\\MyFile.xml"));NodeList nodeList = document.getElementsByTagName("book");for (int i = 0; i < nodeList.getLength(); i++) {Node node = nodeList.item(i);if (node.getNodeType()==Node.ELEMENT_NODE) {Element element = (Element)node;BookDemo bookDemo = new BookDemo();bookDemo.setName(element.getElementsByTagName("name").item(0).getTextContent());bookDemo.setPrice(Double.parseDouble(element.getElementsByTagName("price").item(0).getTextContent()));bookDemo.setNum(Integer.parseInt(element.getElementsByTagName("num").item(0).getTextContent()));list.add(bookDemo);}}return list;}/** * 将bookDemo对象保存到xml中 * @param bookDemo */public void save(BookDemo bookDemo)throws Exception{DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();Document document = documentBuilder.parse(new File("D:\\JavaProject\\itCast\\src\\main\\com\\itcast\\MyFile.xml"));//获得根节点Element rootEl = document.getDocumentElement();//创建book节点Element element= document.createElement("book");element.setAttribute("si", bookDemo.getSi());//将创建的节点绑定到根节点rootEl.appendChild(element);//创建name节点Element element1 = document.createElement("name");element1.setTextContent(bookDemo.getName());//将element1节点绑定到Element节点element.appendChild(element1);//创建price节点Element element2 = document.createElement("price");element2.setTextContent(bookDemo.getPrice().toString());//将element1节点绑定到Element节点element.appendChild(element2);//创建num节点Element element3 = document.createElement("num");element3.setTextContent(bookDemo.getNum().toString());//将element1节点绑定到Element节点element.appendChild(element3);/** * 将内存中的数据输出到xml文件中 */TransformerFactory transformerFactory = TransformerFactory.newInstance();Transformer transformer = transformerFactory.newTransformer();Source xmlSource = new DOMSource(document);Result outputTarget = new StreamResult("D:\\JavaProject\\itCast\\src\\main\\com\\itcast\\MyFile.xml");transformer.transform(xmlSource, outputTarget);}/** * 删除特定si的BookDemo对象 * @param si */public void remove(String si)throws Exception{DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();Document document = documentBuilder.parse("D:\\JavaProject\\itCast\\src\\main\\com\\itcast\\MyFile.xml");NodeList nodeList =document.getElementsByTagName("book");for (int i = 0; i < nodeList.getLength(); i++) {Element node = (Element)nodeList.item(i);//如果找到的book的si等于传递过来的si,就执行删除操作if (si.equals(node.getAttribute("si"))) {node.getParentNode().removeChild(node);break;}}TransformerFactory transformerFactory = TransformerFactory.newInstance();Transformer transformer = transformerFactory.newTransformer();Source xmlSource = new DOMSource(document);Result outputTarget = new StreamResult("D:\\JavaProject\\itCast\\src\\main\\com\\itcast\\MyFile.xml");transformer.transform(xmlSource, outputTarget);}/** *  * 根据特定si改动xml * @param si */public void update(String si,BookDemo bookDemo)throws Exception{DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();Document document = documentBuilder.parse("D:\\JavaProject\\itCast\\src\\main\\com\\itcast\\MyFile.xml");NodeList nodeList =document.getElementsByTagName("book");for (int i = 0; i < nodeList.getLength(); i++) {Element element= (Element)nodeList.item(i);if (si.equals(element.getAttribute("si"))) {element.getElementsByTagName("name").item(0).setTextContent(bookDemo.getName());element.getElementsByTagName("price").item(0).setTextContent(bookDemo.getPrice().toString());element.getElementsByTagName("num").item(0).setTextContent(bookDemo.getNum().toString());break;}}TransformerFactory transformerFactory = TransformerFactory.newInstance();Transformer transformer = transformerFactory.newTransformer();Source xmlSource = new DOMSource(document);Result outputTarget = new StreamResult("D:\\JavaProject\\itCast\\src\\main\\com\\itcast\\MyFile.xml");transformer.transform(xmlSource, outputTarget);}public static void main(String[] args) throws Exception{XMLOpreraor xmlOpreraor = new XMLOpreraor();//List<BookDemo> li = xmlOpreraor.list();//System.out.println(li);/*BookDemo bookDemo = new BookDemo();bookDemo.setName("地理");bookDemo.setNum(112);bookDemo.setPrice(25.0);bookDemo.setSi("004");xmlOpreraor.save(bookDemo);*///xmlOpreraor.remove("004");BookDemo bookDemo1 = new BookDemo();bookDemo1.setName("地理");bookDemo1.setNum(112);bookDemo1.setSi("001");bookDemo1.setPrice(25.0);xmlOpreraor.update("001", bookDemo1);}}sax解析xml:public class Test {public static void main(String[] args) throws Exception{//引进SAXParserFactory工厂SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();SAXParser saxParser = saxParserFactory.newSAXParser();//引进一个xml阅读器XMLReader xmlReader = saxParser.getXMLReader();xmlReader.setContentHandler(new MyHandler());/*List<BookDemo> list = new ArrayList<BookDemo>();saxParser.parse(new File("D:\\JavaProject\\itCast\\src\\main\\com\\itcast\\MyFile.xml"), new MyHandler(list));for (BookDemo bookDemo : list) {System.out.println(bookDemo);}*/}static class MyHandler  implements ContentHandler{@Overridepublic void setDocumentLocator(Locator locator) {// TODO Auto-generated method stub}@Overridepublic void startDocument() throws SAXException {// TODO Auto-generated method stub}@Overridepublic void endDocument() throws SAXException {// TODO Auto-generated method stub}@Overridepublic void startPrefixMapping(String prefix, String uri)throws SAXException {// TODO Auto-generated method stub}@Overridepublic void endPrefixMapping(String prefix) throws SAXException {// TODO Auto-generated method stub}@Overridepublic void startElement(String uri, String localName, String qName,Attributes atts) throws SAXException {// TODO Auto-generated method stub}@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException {// TODO Auto-generated method stub}@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {// TODO Auto-generated method stub}@Overridepublic void ignorableWhitespace(char[] ch, int start, int length)throws SAXException {// TODO Auto-generated method stub}@Overridepublic void processingInstruction(String target, String data)throws SAXException {// TODO Auto-generated method stub}@Overridepublic void skippedEntity(String name) throws SAXException {// TODO Auto-generated method stub}}/*//List<BookDemo> list = new ArrayList<BookDemo>();private List<BookDemo> list;*//** * 定义一个构造函数,初始化类 * @param list *//*public MyHandler(List<BookDemo> list) {super();this.list = list;}BookDemo bookdemo = null;private String currentString = null;@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {//System.out.println("-----------"+qName);if ("book".equals(qName)) {bookdemo = new BookDemo();list.add(bookdemo);bookdemo.setSi(attributes.getValue("si"));}else if ("name".equals(qName)) {currentString = "name";}else if ("price".equals(qName)) {currentString = "price";}else if("num".equals(qName)){currentString = "num";}}@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException {currentString = null;}@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {// TODO Auto-generated method stub//str表示xml中的属性的值String str = new String(ch, start, length);//currentString在上面定义了,保存了特定的值if ("name".equals(currentString)) {bookdemo.setName(str);}else if ("price".equals(currentString)) {bookdemo.setPrice(Double.parseDouble(str));}else if ("num".equals(currentString)) {bookdemo.setNum(Integer.parseInt(str));}}}*/}

原创粉丝点击