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

来源:互联网 发布:什么是网络在线客服 编辑:程序博客网 时间:2024/05/16 19:09
                                xmlxml声明(必须出现在文档的第一行)    示例:<?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"));    }}
0 0
原创粉丝点击