web框架学习前复习——xml(1)

                                xml
xml声明(必须出现在文档的第一行)
    示例:<?xml version="1.0" encoding="UTF-8"?>
    version:属性。取值,1.0.当前使用的XML的版本
    encoding:当前xml文件使用的编码。默认是UTF-8
    standalone:属性说明文档是否独立,可不写
xml标签为自定义标签,由一个根标签嵌套子标签。不可交叉嵌套与html相同。
标签的写法有两种(与html一致)
包含标签主体:<mytag>some content</mytag>
不含标签主体:<mytag/>
CDATA是Character Data的缩写。作用:把标签当做普通文本内容;
<![CDATA[
    <itcast>www.itcast.cn</itcast>//此时被当做文本而非标签语言
]]>
编写DTD的方式有两种一种是直接写在xml文档中,如:
<?xml version=”1.0” encoding=”gbk”?>
<!DOCTYPE 书架(根元素)[
    <!ELEMENT 书架 (书+)>//根元素包含的子元素书最少一个
    <!ELEMENT 书 (书名,作者,售价)>//子元素必须包含的子标签
    <!ELEMENT 书名 (#PCDATA)>//PCDATA表示元素的主体内容为普通文本
    <!ELEMENT 作者 (#PCDATA)>
    <!ELEMENT 售价 (#PCDATA)>         
]>
<书架>
第二种方式为外部引入。dtd作为单独的文件存在。文件扩展名.dtd,文件必须用UTF-8编码保存到磁盘上。引入方式为:
//dtd文件在本地:
<!DOCTYPE 根元素 SYSTEM  “dtd文件的地址”>
//dtd文件在外地(网上):
<!DOCTYPE 根元素 PUBLIC “dtd的名称” “dtd的路径”>
//示例:
<?xml version="1.0" encoding="gbk"?>
<!DOCTYPE TVSCHEDULE SYSTEM "tet.dtd">
<TVSCHEDULE NAME="CCTV">
    <CHANNEL CHAN="zh">
        <BANNER>文本</BANNER>
        <DAY>
            <DATE>文本</DATE>
            <HOLIDAY>文本</HOLIDAY>
        </DAY>
        <DAY>
            <DATE>文本</DATE>
            <PROGRAMSLOT>
                <TIME>文本</TIME>
                <TITLE>文本</TITLE>
                <DESCRIPTION>文本</DESCRIPTION>
            </PROGRAMSLOT>
        </DAY>
    </CHANNEL>
</TVSCHEDULE>

JAXP对xml文件进行DOM方式的解析

//xml文本
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<State Code="37" Name="山东" description="省会">
    <City>
        <Name>济南</Name>
        <Region>历下区</Region>
    </City>
    <City>青岛</City>
    <City>威海</City>
    <City>泰安</City>
</State>
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class JaxpDemo {
    public static void main(String[] args) throws Exception {   
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();//得到创建解析器的工厂:DocumentBuilderFactory
        DocumentBuilder builder = factory.newDocumentBuilder();//通过工厂得到解析器:DocumentBuilder
        Document document = builder.parse("xml文件路径");//加载xml文件:得到了Document对象    
    }
    public static void test1(Document document){//得到某个具体的节点内容
        NodeList nl = document.getElementsByTagName("City");//得到所有的City元素,
        Node node = nl.item(2);//索引从0开始
        System.out.println(node.getTextContent());//打印获得节点的主体内容
    }
    public static void test2(Document document){//遍历所有元素节点。
        Node rootNode = document.getElementsByTagName("State").item(0);
        treewalk(rootNode);
    }
    public static void treewalk(Node node){//递归
        if(node.getNodeType()==Node.ELEMENT_NODE){//是一个元素节点
            System.out.println(node.getNodeName());//打印元素的名称
        }
        NodeList nl = node.getChildNodes();//看看他有没有孩子
        for(int i=0;i<nl.getLength();i++){
            Node n = nl.item(i);
            treewalk(n);//递归
        }
    }
    public static void test3(Document document) throws Exception{//修改某个元素节点的主体内容
        Node secondCityNode = document.getElementsByTagName("City").item(1);//找到第2个City元素
        secondCityNode.setTextContent("威海");//设置主体内容为:威海
        //把内存中的Document写到xml文件中
        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer ts = tf.newTransformer();
        ts.transform(new DOMSource(document), new StreamResult("src/LocList.xml"));
    }
    public static void test4(Document document) throws Exception{//向指定元素节点中增加子元素节
        Element e = document.createElement("City");//<City></City>//创建新元素
        e.setTextContent("烟台");//<City>烟台</City>
        Node rootNode = document.getElementsByTagName("State").item(0);
        rootNode.appendChild(e);//把新元素添加到State最后
        //把内存中的Document写到xml文件中
        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer ts = tf.newTransformer();
        ts.transform(new DOMSource(document), new StreamResult("src/LocList.xml"));
    }
    public static void test5(Document document) throws Exception{//向指定元素节点上增加同级元素节点
        Element e = document.createElement("City");//创建新元素
        e.setTextContent("青岛");
        //调用inertBefore插入新节点:必须由父节点来调用
        Node secondNode = document.getElementsByTagName("City").item(1);
        secondNode.getParentNode().insertBefore(e, secondNode);
        //把内存中的Document写到xml文件中
        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer ts = tf.newTransformer();
        ts.transform(new DOMSource(document), new StreamResult("src/LocList.xml"));
    }
    public static void test6(Document document) throws Exception{//删除指定元素节点
        Node ytNode = document.getElementsByTagName("City").item(4);//得到烟台节点
        ytNode.getParentNode().removeChild(ytNode);//用父节点删除 
        //把内存中的Document写到xml文件中
        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer ts = tf.newTransformer();
        ts.transform(new DOMSource(document), new StreamResult("src/LocList.xml"));
    }
    public static void test7(Document document) throws Exception{//操作XML文件属性
        Node stateNode = document.getElementsByTagName("State").item(0);//看成元素
        if(stateNode.getNodeType()==Node.ELEMENT_NODE){
            Element e = (Element)stateNode;
            System.out.println(e.getAttribute("Name"));
        }
    }
    public static void test8(Document document) throws Exception{//8、添加属性
        Node stateNode = document.getElementsByTagName("State").item(0);//看成元素
        if(stateNode.getNodeType()==Node.ELEMENT_NODE){
            Element e = (Element)stateNode;
            e.setAttribute("description", "省会");
        }
        //把内存中的Document写到xml文件中
        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer ts = tf.newTransformer();
        ts.transform(new DOMSource(document), new StreamResult("src/LocList.xml"));
    }
}

猜你喜欢

转载自blog.csdn.net/u011456867/article/details/52071613
今日推荐