我的传智播客之javaweb

    xiaoxiao2021-03-25  86

    表单提交方式

    使用submit提交: <input type="submit" value="提交"/> 使用button提交: // html <form id="form1"> <input type="text" name="username"/> <input type="button" value="提交" onclick="form1();"> </form> ... // js // 实现提交方法 function form1() { // 获取form var form1 = document.getElementById("form1"); // 设置action form1.action="hello.html"; // 提交form表单 from1.submit(); } 使用超链接提交 <a herf="hello.html?username=1234">使用超链接提交</a> 一些事件: onclick:鼠标点击事件 onchange:改变内容(一般和select一起使用) onfocus:得到焦点 onblur:失去焦点

    xml的简介

    eXtensible Markup Language: 可扩展标记型语言

    标记型语言:也是使用标签来操作 可扩展:html里面的标签都是固定,每个标签都有特定的含义。标签可以自己定义,可以写中文的标签 <person></person>,<狗></狗>。xml用途:html是用于显示数据,xml也可以显示数据(不是主要功能)。xml主要功能是为了存储数据。xml是w3c组织发布的技术。xml有两个版本 1.0,1.1。使用的都是1.0(1.1不能向下兼容)。

    xml的应用

    xml的文档声明 创建一个文件,后缀名是.xml。必须要有文档声明,必须要写在第一行第一列。<? xml version="1.0" encoding="gbk"?> 属性: version:xml的版本encoding:xml编码 gbk、utf-8、iso8859-1(不包含中文standalone:是否需要依赖其他文件(yes/no)xml的中文乱码问题解决:保存时候的编码和设置打开时候的编码一致,不会出现乱码。定义元素(标签)定义属性注释特殊字符CDATA区PI指令

    xml的元素定义

    有开始必须要有结束 <person></person>标签没有内容,可以在标签内结束 <aa/>标签可以嵌套,必须要合理嵌套一个xml中只能有一个根标签,其他标签都是这个标签下面的标签在xml中把空格和换行都当前内容来解析 // 表示的内容不同 <aa>bb</aa> <aa> bb </aa> xml中标签的命名规则 xml标签区分大小写xml的标签不能以数字或下划线”_”开头不能以xml,XML,Xml等开头不能包含空格和冒号”:”

    xml中属性的定义

    一个标签上可以有多个属性属性名称不能相同xml属性的命名规范和元素的命名规范一致

    xml中的注释

    <!-- xml的注释 --> 注释不能嵌套注释也不能放到第一行,第一行第一列必须放文档声明

    xml中的特殊字符

    跟html里的差不多

    CDATA区

    可以解决多个字符都需要转义的操作,把这些内容放到CDATA区里面。

    <b>if(a<b && b<c && c<d){}</b> // 写法 <![CDATA[ 内容 ]]>

    xml的PI指令(处理指令)

    可以在xml中设置样式,设置样式只能对英文标签名称起作用。

    <?xml-stylesheet type="text/css" href="xxx.css"?>

    xml的约束

    为什么需要约束? xml的标签是自定义的,需要技术来规定xml中只能出现的元素。xml的约束的技术:dtd约束和schema约束

    dtd的快速入门

    创建一个文件,后缀名:.dtd步骤: xml中有多少个元素就在dtd文件中写多少个<!ELEMENT>判断元素是简单元素还是复杂元素 复杂元素:有子元素的元素,子元素间用逗号”,”隔开 <!ELEMENT 元素名称 (子元素)>简单元素:没有子元素 <!ELEMENT 元素名称 约束>在xml文件中引入dtd文件 <!DOCTYPE 根元素名称 SYSTEM "dtd文件的路径">浏览器只负责检验xml的语法,不负责校验约束。想要校验xml的约束,需要使用工具(myeclipse)。

    dtd的三种引用方式

    // 引用外部的dtd文件 <!DOCTYPE 根元素名称 SYSTEM "dtd路径"> // 使用内部的dtd文件 <!DOCTYPE 根元素名称 [ <!ELEMENT person (name,age)> <!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)> ]> // 使用外部的dtd文件((网络上的dtd文件) <!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD文档的URL"> // struts2的配置文件用到

    使用dtd定义元素

    简单元素:<!ELEMENT 元素名称 约束> (#PCDATA):约束name是字符串类型EMPTY:元素为空(没有内容)ANY:任意复杂元素:<!ELEMENT 元素名称 (子元素)> <!ELEMENT person (name,age,sex,school)>,子元素只能出现一次。表示子元素出现的次数 <!ELEMENT person (name+,age?,sex*,school)> +:表示1次或多次?:表示0次或1次*:表示0次或多次子元素之间使用逗号进行隔开,表示子元素出现的顺序。子元素之间使用竖线”|”隔开 <!ELEMENT person (name|age|sex|school)>,表示元素只能出现其中的任意一个。

    使用dtd定义属性

    语法: <!ATTLIST 元素名称 属性名称 属性类型 属性的约束 > 属性类型 CDATA:字符串枚举:表示只能在一定的范围内出现值,但是只能每次出现其中的一个 (aa|bb|cc)ID:值只能是字母或下画线开头属性的约束 #REQUIRED:属性必须存在#IMPLIED:属性可有可无#FIXED:表示一个固定值 #FIXED “AAA”,属性的值必须是设置的这个固定值直接值 不写属性,使用直接值写了属性,使用设置那个值

    实体的定义

    语法: <!ENTITY 实体名称 "实体的值"> <!ENTITY TEST "AAA"> 使用实体 &实体名称;定义实体需要写在内部dtd里,,有些浏览器不能得到外部的dtd的实体。

    xml的解析的简介(写到java代码)

    xml的解析方式(技术):dom 和 saxdom方式解析: 解析过程:根据xml的层级结构在内存中分配一个树形结构。把xml的标签、文本、属性都封装成对象。优点:很方便实现增删改操作缺点:如果文件过大,造成内存溢出sax方式解析: 解析过程:采用事件驱动,边读边解析。从上到下,一行一行的解析,解析到某一个对象,返回对象名称。优点:不会造成内存溢出,方便实现查询操作缺点:不能实现增删改操作解析xml需要解析器 不同组织提供api提供针对dom和sax的解析器 sun公司:jaxpdom4j组织:dom4j (实际开发中使用)jdom组织:jdom

    jaxp的api查看

    jaxp是javase的一部分,jaxp解析器在jdk的javax.xml.parsers包里面。四个类:分别是针对dom和sax解析使用的类 dom: DocumentBuilder:解析器类,这个类是一个抽象类。通过DocumentBuilderFactory实例的newDocumentBuilder()方法获取。解析xml:parse(“xml路径”),返回是Document整个文档。Document是一个接口,父节点是Node,Document找不到的方法可以在Node里面去找。Document里面的方法 getElementsByTagName(String tagName):得到标签,返回的是集合 NodeListcreateElement(String tagName):创建标签createTextNode():创建文本appendChild(Node newChild):把文本添加到标签下面removeChild():删除节点getParentNode():获取父节点NodeList:getLength()、item(int index)Node:getTextContent():得到标签里面的内容DocumentBuilderFactory:解析器工厂,这个类也是一个抽象类,用newInstance()获取该实例。sax: SAXParser:解析器类SAXParserFactory:解析器工厂

    使用jaxp实现查询操作

    查询xml中所有的xxx元素的值查询xml中第一个name元素的值 // 查询所有name元素的值 private static void selectAll() throws Exception { /* * 1.创建解析器工厂 * 2.根据解析器工厂创建解析器 * 3.解析xml返回document * 4.得到所有的name元素 * 5.返回集合,遍历集合,得到每一个name元素 */ // 创建解析器工厂 DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); // 创建解析器 DocumentBuilder builder = builderFactory.newDocumentBuilder(); // 解析xml返回document Document document = builder.parse("src/person.xml"); // 得到name元素 NodeList list = document.getElementsByTagName("name"); // 遍历集合 for (int i = 0; i < list.getLength(); i++) { Node name1 = list.item(i); // 得到每一个name元素 // 得到name元素里面的值 String s = name1.getTextContent(); System.out.println(s); } } // 查询xml中第一个name元素的值 public static void selectSin() throws Exception { /* * 1.创建解析器工厂 * 2.根据解析器工厂创建解析器 * 3.解析xml返回document * 4.得到所有的name元素 * 5.使用返回集合的item,下标获取具体的元素 * 6.得到具体的值 */ // 创建解析器工厂 DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); // 创建解析器 DocumentBuilder builder = builderFactory.newDocumentBuilder(); // 解析xml返回document Document document = builder.parse("src/person.xml"); // 得到所有的name元素 NodeList list = document.getElementsByTagName("name"); // 使用下标,得到第一个元素 String s = list.item(0).getTextContent(); // 得到name里面的具体的值 System.out.println(s); }

    使用jaxp添加节点

    在第一个<p1>下面(末尾)添加<sex>nv</sex>

    // 在第一个p1下面(末尾)添加<sex>nv</sex> public static void addSex() throws Exception { /* * 1.创建解析器工厂 * 2.根据解析器工厂创建解析器 * 3.解析xml返回document * 4.得到第一个p1 * 5.创建sex标签 * 6.创建文本 * 7.把文本添加到sex下 * 8.把sex添加到第一个p1下 * 9.回写xml */ // 创建解析器工厂 DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); // 创建解析器 DocumentBuilder builder = builderFactory.newDocumentBuilder(); // 解析xml返回document Document document = builder.parse("src/person.xml"); // 得到所有的p1 NodeList list = document.getElementsByTagName("p1"); // 得到第一个p1 Node p1 = list.item(0); // 创建sex标签 Element sex1 = document.createElement("sex"); // 创建文本 Text text1 = document.createTextNode("nv"); // 把文本添加到sex1下 sex1.appendChild(text1); // 把sex1添加到p1下 p1.appendChild(sex1); // 回写xml TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.transform(new DOMSource(document), new StreamResult("src/person.xml")); }

    使用jaxp修改节点

    修改第一个<p1>下面的<sex>内容是nan

    // 修改第一个p1下面的<sex>内容是nan public static void modifySex() throws Exception { /* * 1.创建解析器工厂 * 2.根据解析器工厂创建解析器 * 3.解析xml返回document * 4.得到sex * 5.修改sex里面的值 * 6.回写xml */ // 创建解析器工厂 DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); // 创建解析器 DocumentBuilder builder = builderFactory.newDocumentBuilder(); // 得到document Document document = builder.parse("src/person.xml"); // 得到sex Node sex1 = document.getElementsByTagName("sex").item(0); // 修改sex值 sex1.setTextContent("nan"); // 回写xml TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.transform(new DOMSource(document), new StreamResult("src/person.xml")); }

    使用jaxp删除节点

    删除<sex>nan</sex>节点

    // 删除<sex>nan</sex>节点 public static void delSex() throws Exception { /* * 1.创建解析器工厂 * 2.根据解析器工厂创建解析器 * 3.解析xml返回document * 4.得到sex * 5.获取sex的父节点 * 6.使用sex的父节点删除sex * 7.回写xml */ // 创建解析器工厂 DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); // 创建解析器 DocumentBuilder builder = builderFactory.newDocumentBuilder(); // 得到document Document document = builder.parse("src/person.xml"); // 得到sex Node sex1 = document.getElementsByTagName("sex").item(0); // 得到sex的父节点 Node p1 = sex1.getParentNode(); p1.removeChild(sex1); // 回写xml TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.transform(new DOMSource(document), new StreamResult("src/person.xml")); }

    使用jaxp遍历节点

    把xml中的所有元素名称打印出来

    // 遍历节点,把所有元素名称打印出来 public static void listEelment() throws Exception { /* * 1.创建解析器工厂 * 2.根据解析器工厂创建解析器 * 3.解析xml返回document * 4.得到根节点 * 5.得到根节点子节点 * 使用递归实现 */ // 创建解析器工厂 DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); // 创建解析器 DocumentBuilder builder = builderFactory.newDocumentBuilder(); // 得到document Document document = builder.parse("src/person.xml"); // 编写一个方法实现遍历操作 list1(document); } private static void list1(Node node) { // 判断元素类型的时候才打印 if (node.getNodeType() == Node.ELEMENT_NODE) { System.out.println(node.getNodeName()); } // 得到一层子节点 NodeList list = node.getChildNodes(); for (int i = 0; i < list.getLength(); i++) { // 得到每一个节点 Node node1 = list.item(i); list1(node1); } }
    转载请注明原文地址: https://ju.6miu.com/read-34272.html

    最新回复(0)