Java Web 基础笔记(1)

一 HTML和JS简介
二 XML简介
 1. 认识xml
    <?xml version="1.0" encoding="UTF-8"?>   
    XML前导区 三个属性:
        version 使用的xml版本 目前为1.0
        encoding 页面的字符编码格式 
        standalone 此xml是否可以独立运行如果需要进行显示可以使用CSS或XSL进行控制
    XML可以通过css以HTML格式进行输出,但xml主要用于存储数据,显示使用HTML更合适
    使用CDATA标记使标记内内容进行原样输出,基本语法:
        <![CDATA[    原样输出内容   ]]>
 2. ---------------------------------xml解析-----------------------------------------------
    xml解析分为两种方式:DOM解析和SAX解析
        xml文档---->xml分析器---->DOM或SAX接口---->xml应用程序
  2.1 -----------------------------DOM解析-------------------------------------------------
        基于DOM的分析器会将xml文件转换成一个DOM树,应用程序可以在任何时候访问文档中的任何数据
        但由于将全部内容读取到内存中,这种解析方式较消耗内存,效率并不理想,不过与xml的思想吻合,有广泛的应用价值
        DOM解析中有四个核心接口:
            Document:此接口代表整个xml文档,通过Document节点可以访问xml中的所有元素内容
                常用方法: public NodeList getElementsByTagName(String tagname)   取得指定节点的NodeList
                          public Element createElement(String tagname) throws DOMExecption    创建一个指定名称的节点
                          public Text createTextNode(String data)    创建一个文本内容节点
               //           Element createElement(String tagname)  throws DOMExecption   创建一个节点元素
                          public Attr createAttribute(String name)  throws DOMExecption   创建一个属性
            Node:每一个Node 代表xml中的一个节点
                常用方法: Node appendChild(Node newchild)  throws DOMExecption  在当前节点下添加一个子节点
                          public NodeList getChildNodes()   取得本节点下的全部子节点
                          public Node getFirstChild()  取得本节点下的第一个节点
                          public Node getLastChild()  取得本节点下的最后一个节点
                          public boolean hasChildNodes()  是否还有其它节点
                          public boolean hasAttributes()  是否还有其它属性
                          String getNodeValue() throws DOMExecption 取得节点内容
            NodeList: 表示一个节点的集合
                常用方法:public int getLength()   取得节点长度
                         public Node item(int index)   根据索引取得节点对象
            NamedNodeMap:    表示一组节点和其唯一名称的一一对应关系
        如果需要进行DOM解析,需要按照如下步骤进行:
            //建立DocumentBuilderFactory
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            //建立DocumentBuilder
            DocumentBuilder builder = factory.newDocumentBuilder();
            //建立Document
            Document doc = builder.parse("web.xml");
            //建立NodeList
            NodeList nl = doc.getElementsByTagName("name");
            //读取XML信息
            String str = nl.item(0).getFirstChild().getNodeValue();
        DOM解析中每个节点中的内容都是一个单独的文本节点,nl.item(0).getFirstChild().getNodeValue()所以采用这种方式
        当NodeList nl = doc.getElementsByTagName("name"); nl有多个节点时,使用for循环进行循环输出
            for (int i = 0;i<nl.getLength();i++){
                String nodeValue = nl.item(i).getFirstChild().getNodeValue();
                String nodeValue1 = nl1.item(i).getFirstChild().getNodeValue();
                System.out.println(nodeValue+"--->"+nodeValue1);
            }
    生成XML文件并保存到磁盘需要使用TransformerFactory、Transformer、DOMSource和StreamResult四个类完成
        TransformerFactory:用于获取一个Transformer 对象
            常用方法: public static TransformerFactory newInstance()throws TransformerFactoryConfigurationError
                            获得一个新的TransformerFactory实例。 这个静态方法创建一个新的工厂实例。
                      public abstract Transformer newTransformer() throws TransformerConfigurationException
                            返回一个Transformer实例
        Transformer: 用于完成内容的输出
                      public abstract void transform(Source xmlSource,Result outputTarget)throws TransformerException
                        将接受doc的DOMSource实例 xmlSource 输出
        DOMSource: 主要用于接收Document对象
        StreamResult: 指定要使用的输出流对象
            常用方法: public StreamResult(File f)   指定输出的文件 构造方法
                      public StreamResult(OutputStream outputstream) 指定输出的输出流  构造方法
 2.2. ----------------------------------------SAX解析----------------------------------------------
        SAX采用顺序模式进行访问,快速读取xml数据,当SAX解析器扫描到文档开始与结尾,属性开始与结尾时都会调用相关方法。
        常用方法: public void startDocument() throws SAXException 文档开始时执行
                  public void endDocument() throws SAXException 文档结束时执行
                  public void startElement(String uri,String localName,String qName,Attributes attributes) throws SAXException 属性开始时执行
                  public void endElement(String uri,String localName,String qName) throws SAXException 属性结束时执行
                  public void characters(char[] ch,int start,int length) throws SAXException 元素内容
       

使用SAX解析XML文件首先需要自定义一个SAX解析器,实现DefaultHandler接口,并重写上面五个方法。
        //自定义SAX解析器
            class MySAX extends DefaultHandler {
                @Override
                public void startDocument() throws SAXException {
                    System.out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
                }

                @Override
                public void endDocument() throws SAXException {
                    System.out.println("文档读取结束");
                }

                @Override
                public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
                    System.out.print("<");
                    System.out.print(qName);
                    if (attributes != null){
                        for (int i = 0;i<attributes.getLength();i++){
                            System.out.print(" "+attributes.getQName(i)+"=\""+attributes.getValue(i)+"\"");
                        }
                    }
                    System.out.println(">");

                }

                @Override
                public void endElement(String uri, String localName, String qName) throws SAXException {
                    System.out.print("</");
                    System.out.print(qName);
                    System.out.println(">");
                }

                @Override
                public void characters(char[] ch, int start, int length) throws SAXException {
                    System.out.println(new String(ch,start,length));
                }

            }


        然后通过SAXParserFactory创建SAXParser,通过SAXParser实例对象调用parse方法完成解析输出
        //创建SAXParserFactory
        SAXParserFactory factory = SAXParserFactory.newInstance();
        //创建SAXParser
        SAXParser saxParser = factory.newSAXParser();
        //输出
        saxParser.parse(new File("F:\\IntelliJ\\WorkSpace\\WebDome_1\\Dome_1\\Hello1.xml"),new MySAX());
-----------------DOM解析和SAX解析的区别-----------------------
                            DOM                                                      SAX
    操作        将整个文件读入内存形成DOM树,如果文件过大无法使用         顺序读入所需的文件内容,不会一次性读取,不受文件大小影响
    访问权限    可以随意读取和修改文件的任意部分,没有次数限制            只能从头到尾解析一次,不支持五年间的随意修改
    修改        可以任意修改文件树                                     只能读取XML文件内容,但不能修改
    复杂度      易于理解,易于开发                                     开发比较复杂,需要用户自定义事件处理器
    对象模型    系统自动建立DOM树,XML对象模型由系统提供                 可以使用SAX自建事件处理器
    DOM适合于修改,SAX适合于读取大型文件
 3. --------------------------------------JDOM----------------------------------------------------------------
    JDOM = DOM修改文件的有点 + SAX 快速读取的优点
    JDOM提供了五个主要操作类:Document   定义了对XML的各种操作,可以使用提供的方法存取根元素及处理命令文件层次的相关信息
                            DOMBuilder 用来建立一个JDOM树 
                            SAXBuilder 建立一个SAX解析
                            Element    定义元素的各种操作,可以获得元素属性,元素内容,子节点等
                            Attribute  定义了元素中的属性操作
                            XMLOutputter 将一个JDOM结构树格式化为一个XML文件并输出
 

   JDOM进行XML文件输出
            Element addresslist = new Element("addresslist");
            Element linkman = new Element("linkman");
            Element name = new Element("name");
            Element email = new Element("email");
            Attribute id = new Attribute("id","wt");
            Document doc = new Document(addresslist);
            name.setText("魏涛");
            email.setText("123456");
            name.setAttribute(id);
            //不能使用setContent set会清除之前添加的节点
            linkman.addContent(name);  
            linkman.addContent(email);
            addresslist.addContent(linkman);
            XMLOutputter  out = new XMLOutputter();
            out.setFormat(out.getFormat().setEncoding("UTF-8"));
            try {
                out.output(doc,new FileOutputStream("F:\\IntelliJ\\WorkSpace\\WebDome_1\\Dome_1\\Hello2.xml"));
            } catch (IOException e) {
                e.printStackTrace();
            }
    JDOM进行XML文件读取
            SAXBuilder builder = new SAXBuilder();
            Document doc = null;
            try {
                doc = builder.build("F:\\IntelliJ\\WorkSpace\\WebDome_1\\Dome_1\\Hello2.xml");
            } catch (JDOMException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            Element stu = doc.getRootElement();
            List list = stu.getChildren("linkman");
            for( int i = 0;i<list.size();i++){
                Element e = (Element) list.get(i);
                String name = e.getChildText("name");
                String id = e.getChild("name").getAttribute("id").getValue();
                String email = e.getChildText("email");
                System.out.println(name + id + email);
            }


 4. ---------------------------DOM4J----------------------------------------------------
    主要接口:Attribute 定义了XML属性
             Branch         为能够包含子节点的节点,如XML元素和文档,定义了一个公共的行为
             CDATA          定义了XML CDATA区域
             CharacterData  一个标识接口,标识基于字符的节点
             Comment        定义了XML的注释
             Document       定义了XML的文档
             Element        定义了XML的元素
             Text           定义了XML的文本节点
   

 DOM4J进行XML文件输出
         //创建文档
        Document doc = DocumentHelper.createDocument();
        //添加节点
        Element addresslist = doc.addElement("addresslist");
        Element linkman = addresslist.addElement("linkman");
        Element name = linkman.addElement("name");
        Element email = linkman.addElement("email");
        //添加节点内容
        name.setText("魏涛");
        email.setText("123456");
        //定义输出格式
        OutputFormat format = OutputFormat.createPrettyPrint();
        format.setEncoding("UTF-8");
        //使用XMLWriter进行输出
        XMLWriter writer = new XMLWriter(new FileOutputStream(new File("F:\\IntelliJ\\WorkSpace\\WebDome_1\\Dome_1\\Hello3.xml")),format);
        writer.write(doc);
        //资源关闭
        writer.close();
    DOM4J进行XML文件读入
        //确定读入的文件
        File file = new File("F:\\IntelliJ\\WorkSpace\\WebDome_1\\Dome_1\\Hello3.xml");
        //建立SAX解析
        SAXReader reader = new SAXReader();
        //文件读入
        Document doc = reader.read(file);
        //获取根节点
        Element rootElement = doc.getRootElement();
        //获取根节点下所有节点
        Iterator iterator = rootElement.elementIterator();
        //迭代输出
        while (iterator.hasNext()){
            Element e = (Element) iterator.next();
            System.out.println("name"+e.elementText("name"));
            System.out.println("email"+e.elementText("email"));
        }

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值