博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java XML解析-我们到底能走多远系列(12)
阅读量:4589 次
发布时间:2019-06-09

本文共 5362 字,大约阅读时间需要 17 分钟。

我们到底能走多远系列(12)

扯淡:距离 我们到底能走多远系列 的阶段性目标15篇,已经很近了,100篇的最终目标还很远。

   最近,接到个面试通知,做了份笔试,大部分都是基础题目,有java的,sql的。看来下一次换工作的征途又要开始啦,哈哈。

  只记得有个简单的小题目了,把ABC,变成CBA。很简单的基础题,只是我实在记不起那个笔试题里的其他题目了。哎...

实现:

package code.stu.string;public class Inversion {        public static void main(String[] args) {        System.out.println(inversion("abcdefghijk"));            }        public static String inversion(String str){                char[] chars = str.toCharArray();// String 转换成char[]        int len = chars.length;        int min = 0;        int max = len - 1;        char value;        while(min < len/2 || max > len/2){
// 对调进行到中间位置就跳出循环 // 三步互换 value = chars[min]; chars[min] = chars[max]; chars[max] = value; min++; max--; } return String.valueOf(chars);// char[]转换成String }}

 

主题:

  我们对xml解析都不陌生,很多地方有涉及到它,比如:Spring,tomcat,ibatis,都有用xml。

  介绍下java解析xml的两种方式:DOM和SAX

   DOM的方式是吧整个xml文件读到内存中,进行解析。

   SAX的方式则是一步步读取每一个节点和内容而触发事件进行解析。

两种代码调用的方式如下:其实他们的源码也值得有尽力的朋友解读啊。

  Dom:

 
/**     *      * @param path 配置文件路径     * @param nodeName 节点名     * @param nodeValue 修改成什么样value     * @return     * @throws Exception     */    public int changeConfig1(String path, String nodeName, String nodeValue) throws Exception{        File config = new File(path);        // 解析器工厂类        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();         // 解析器        DocumentBuilder db = dbf.newDocumentBuilder();        // 文档树模型Document        Document document = db.parse(config);        // A.通过xml文档解析        NodeList nodeList = document.getElementsByTagName(nodeName);        // B.将需要解析的xml文档转化为输入流,再进行解析        //InputStream is = new FileInputStream(config);        //Document nodeList = db.parse(is);         for (int i = 0; i < nodeList.getLength(); i++) {               // Element extends Node            Element node = (Element)nodeList.item(i);            System.out.println( node.getElementsByTagName("b").item(0).getFirstChild().getNodeValue());            node.getElementsByTagName(nodeName).item(0).getFirstChild().setTextContent(nodeValue);            System.out.println( node.getElementsByTagName("c").item(0).getFirstChild().getNodeValue());        }        // 是改动生效,网上很多代码都没有提到这步操作,我不明白他们是怎么完成修改xml的value值的。        // 可以理解成内存中的数据已经被改了,还没有映射到文件中        TransformerFactory tfFac = TransformerFactory.newInstance();        Transformer tf = tfFac.newTransformer();        DOMSource source = new DOMSource(document);        tf.transform(source, new StreamResult(config));// 修改内容映射到文件        return 0;    }
 

 

  SAX:

package web.method.file.sax;import java.io.FileReader;import java.util.ArrayList;import java.util.List;import org.xml.sax.Attributes;import org.xml.sax.InputSource;import org.xml.sax.SAXException;import org.xml.sax.XMLReader;import org.xml.sax.helpers.DefaultHandler;import org.xml.sax.helpers.XMLReaderFactory;import web.method.file.model.People;// 继承DefaultHandlerpublic class ConfigHandler extends DefaultHandler {    private final List
peoples = new ArrayList
(); private People p; private String currentValue = null; private String preTag = null; @Override // 开始Element public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException { if("people".equals(name)){ p = new People(); } preTag = name; } @Override // 结束Element public void endElement(String uri, String localName, String name) throws SAXException { if("people".equals(name) && p != null){ peoples.add(p); } preTag = null; } @Override // 值 public void characters(char[] ch, int start, int length) throws SAXException { currentValue = new String(ch, start, length); if(preTag != null && p != null){ if(preTag.equals("name")){ p.setName(currentValue); }else if(preTag.equals("from")){ p.setFrom(currentValue); } } } // 取值 public List
getPeoples(){ return peoples; } public static void main(String[] args) throws Exception { ConfigHandler handler = new ConfigHandler(); //创建一个XML解析器(通过SAX方式读取解析XML) XMLReader reader = XMLReaderFactory.createXMLReader(); //设置XML解析器的处理文档内容相关事件的处理器 reader.setContentHandler(handler); //解析books.xml文档 reader.parse(new InputSource(new FileReader("D:\\我的文档\\company.xml"))); for (int i = 0; i < handler.getPeoples().size(); i++) { System.out.println(handler.getPeoples().get(i).getName()); } }}

xml:

dc
96
los angles
have biggest mind in the world
jiannanchun
96
las vages
a good defender

总结:这只是对解析xml的开始,先学会怎么用吧。

为什么要继续对这方面学习呢?因为现在自己空闲的时候,在编个工程,想用xml来存数据。在这方面学习过的朋友给点建议哦。

现在遇到的问题是:怎样设计一个多线程读取xml文件内容的结构?有想法的给点建议。

 

让我们继续前行

----------------------------------------------------------------------

努力不一定成功,但不努力肯定不会成功。

共勉。

转载于:https://www.cnblogs.com/killbug/archive/2012/10/29/2745615.html

你可能感兴趣的文章
Improving Visual C++ Debugging with Better Data Display
查看>>
JDBC
查看>>
workspace 配置
查看>>
C# 针对特定的条件进行锁操作,不用lock,而是mutex
查看>>
Spring归纳
查看>>
MyEclipse Web Project导入Eclipse Dynamic Web Project,无法部署到tomcat问 题
查看>>
24小时学通Linux内核之向内核添加代码
查看>>
python 函数
查看>>
Solr4.0 如何配置使用UUID自动生成id值
查看>>
Marketing™Series用户手册(Marketing™Series Manual)
查看>>
Java动态代理
查看>>
二维码开源库zbar、zxing使用心得
查看>>
框架设计读书笔记--扩展点设计--组合法
查看>>
Web开发小贴士 -- 全面了解Cookie
查看>>
收藏Javascript中常用的55个经典技巧
查看>>
Arm-linux-gcc-4.3.2安装步骤
查看>>
Java多线程与并发编程学习
查看>>
Support Vector Machine
查看>>
牛客-2018多校算法第五场C-KMP
查看>>
Linux查看文件内容
查看>>