xml_1

第一天学习xml,知识点如下:

一、xml 中 a<b 不能正常显示,要用转义字符,但如果表达式过于长,可用CDATA区表示:

CDATA区:
可以解决多个字符都需要转义的操作 if(a<b && b<c && d<f) { }
把这些内容放在CDATA区,不需要转义了
写法:
    <![CDATA[
       if(a<b && b<c && d<f)
    ]]>

二、xml的约束:
dtd约束和Scheam约束

dtd约束:
    创建一个文件  后缀名.dtd
    步骤
    (1)看xml中有多少个元素,有多少个元素,就写多少个<!ELEMENT>
     (2)判断元素是简单元素还是复杂元素
     复杂元素:有子元素的元素
     <!ELEMENT 元素名称  (子元素)>
     简单元素:
     <!ELEMENT 元素名称  (#PCDATA)>

注意:元素名称左右有空格

<!ELEMENT person (name,age)>
        <!ELEMENT name (#PCDATA)>
        <!ELEMENT age (#PCDATA)>

    (3)引入dtd文件的方式

    1.在xml文件中引入dtd文件
     <!DOCTYPE 根元素名称  SYSTEM "***.dtd">

<!DOCTYPE person SYSTEM "1.dtd">

   2.使用内部的dtd文件

<!DOCTYPE 根元素名称[
    <!ELEMENT ***********>    
]>

   3.使用外部的dtd文件(网络上的dtd文件)

(4)格式

复杂元素:
<!ELEMENT person(name,age)>
-子元素都只能出现一次,但也可利用以下符号

+:1/+     *:0/+     ?:0/1

如<!ELEMENT person(name+,age)>,即name可以出现多次

而对于分隔符:     , 元素先后顺序    | 出现任意一个

  (5)使用dtd定义属性

语法:

<!ATTLIST 元素名称
    属性名称 属性类型 属性约束
>
属性类型:
    -CDATA:字符串,如
    <!ATTLIST birthday ID1 CDATA #REQUIRED>
    -枚举:表示在一定范围内出现值,但是只能每次出现一个
      (aa|bb|cc)
    <!ATTLIST age ID2(aa|bb|cc)  #REQUIRED>
属性的约束:
    #REQUIRED:属性必须有
    #IMPLIED :可有可无
    #FIXED:固定值 #FIXED "aaa"

(6)实体的定义:
<!ENTITY 实体名称 实体的值>
<!ENTITY Test "haha">
使用实体: &实体名; &Test;(即可以用 &Test;来代替文本“haha”)

 三、xml的解析

xml的解析技术:dom和sax

dom方式:如果文件过大,会造成内存溢出;增删查改容易
sax方式:(边读边解析,从上往下)不能增删查改;不会内存溢出

解析xml,首先需要解析器
sun公司提供了针对dom和sax的解析器 jaxp
dom4j组织针对dom和sax的解析器 dom4j(实际开发中最多)
jdom组织针对dom和sax的解析器 jdom

jaxp解析器!!!

jaxp解析器在jdk的javax.xml.parsers 包里:主要是 四个大类

dom:DocumentBuilder:解析器类、DocumentBuilderFactory:解析器工厂

sax:SAXParser:解析器类、SAXParserFactory:解析器工厂

DocumentBuilder类中主要方法有:

getElementsByTagName、createElement、createTextNode、appendChild、removeChild、getParentNode、getTextContent

最后实践了下,利用jaxp增删查改了xml文件中的节点。 

四、问题

1.javascript中 直接document.getElementsByName("delrow")[0],取到 第一个delrow节点,一开始认为在java中也是一样,不过后来发现java中getElementsByName返回的是 NodeList,需要.item(index),发现与js的小小区别,js返回带有指定标签名的对象的集合,可直接通过数组的方法获取;

2.在利用jaxp 遍历xml所有节点时,可以用到递归的方法;

private static void getList(Node document) {
//        if(document.getNodeName()!="#text") {
        if(document.getNodeType()==Node.ELEMENT_NODE) {
            System.out.println(document.getNodeName());
        }
        NodeList nodeList=document.getChildNodes();
        for(int i=0;i<nodeList.getLength();i++){
            Node node=nodeList.item(i);
            getList(node);
        }

猜你喜欢

转载自blog.csdn.net/Hpsyche/article/details/81278302
今日推荐