web框架学习前复习——xml(1)
2016-07-30 11:00
375 查看
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")); } }
相关文章推荐
- XML 与 JSON 优劣对比
- As3.0 xml + Loader应用代码
- 网马生成器 MS Internet Explorer XML Parsing Buffer Overflow Exploit (vista) 0day
- ext读取两种结构的xml的代码
- 实例解析Ruby程序中调用REXML来解析XML格式数据的用法
- Ruby中XML格式数据处理库REXML的使用方法指南
- C#中如何使用 XmlReader 读取XML文件
- C#针对xml基本操作及保存配置文件应用实例
- Ruby使用REXML库来解析xml格式数据的方法
- Ruby程序中创建和解析XML文件的方法
- Ruby的XML格式数据解析库Nokogiri的使用进阶
- asp下查询xml的实现代码
- sqlserver FOR XML PATH 语句的应用
- 使用sp_xml_preparedocument处理XML文档的方法
- EBS xml publisher中文乱码问题及解决办法
- C#中的Linq to Xml详解
- C#代码操作XML进行增、删、改操作
- C#操作XML文件实例汇总
- C# XML序列化方法及常用特性总结分析