javaee之xml和dtd的基础练习

从昨天的学习中,我学习到了xml的基础知识,包括dtd的约束基础

一、首先 是关于dtd的联系,关于这部分我们知识需要了解能够根据dtd约束来写出xml文件即可

1)首先是dtd文件:

<!ELEMENT TVSCHEDULE (CHANNEL+)>
<!ELEMENT CHANNEL (BANNER,DAY+)>
<!ELEMENT BANNER (#PCDATA)>
<!ELEMENT DAY (DATE,(HOLIDAY|PROGRAMSLOT+)+)>
<!ELEMENT HOLIDAY (#PCDATA)>
<!ELEMENT DATE (#PCDATA)>
<!ELEMENT PROGRAMSLOT (TIME,TITLE,DESCRIPTION?)>
<!ELEMENT TIME (#PCDATA)>
<!ELEMENT TITLE (#PCDATA)>
<!ELEMENT DESCRIPTION (#PCDATA)>
<!ATTLIST TVSCHEDULE NAME CDATA #REQUIRED>
<!ATTLIST CHANNEL CHAN CDATA #REQUIRED>
<!ATTLIST PROGRAMSLOT VTR CDATA #IMPLIED>
<!ATTLIST TITLE RATING CDATA #IMPLIED>
<!ATTLIST TITLE LANGUAGE CDATA #IMPLIED>

2)然后根据dtd写出xml

TVSCHEDULE  :是根标签 里面有一个子元素 <span style="font-family: Arial, Helvetica, sans-serif;">CHANNEL </span>
<span style="font-family: Arial, Helvetica, sans-serif;"></span><pre name="code" class="html">CHANNEL :这个元素有 <span style="font-family: Arial, Helvetica, sans-serif;">BANNER,DAY这两个子元素</span>
<span style="font-family: Arial, Helvetica, sans-serif;"></span><pre name="code" class="html"><span style="font-family: Arial, Helvetica, sans-serif;">BANNER  :这个元素可以随便写字符串,因为 #PCDATA</span>
<span style="font-family: Arial, Helvetica, sans-serif;">DAY :这个元素中有 </span><span style="font-family: Arial, Helvetica, sans-serif;">DATE,HOLIDAY|PROGRAMSLOT 这几个子元素</span>
<span style="font-family: Arial, Helvetica, sans-serif;">HOLIDAY 和 DATE : 这两个元素都可以随便写字符串 </span>
<span style="font-family: Arial, Helvetica, sans-serif;"></span><pre name="code" class="html"><span style="font-family: Arial, Helvetica, sans-serif;">PROGRAMSLOT  :这里面有</span><span style="font-family: Arial, Helvetica, sans-serif;">TIME,TITLE,DESCRIPTION这几个子元素,也是可以写字符串</span>
<span style="font-family: Arial, Helvetica, sans-serif;"></span><pre name="code" class="html">TVSCHEDULE 的 NAME 属性 必须有,因为#REQUIRED<pre name="code" class="html">CHANNEL 的 CHAN 属性也是必须有<pre name="code" class="html">PROGRAMSLOT 的 VTR 属性、 <span style="font-family: Arial, Helvetica, sans-serif;">TITLE  的 RATING  属性 、  </span><span style="font-family: Arial, Helvetica, sans-serif;">TITLE 的 LANGUAGE  属性 是可选的,不一定必须有,因为#IMPLIED</span>
<span style="font-family: Arial, Helvetica, sans-serif;">
</span>
<span style="font-family: Arial, Helvetica, sans-serif;">3)、写出来之后便是</span>
<span style="font-family: Arial, Helvetica, sans-serif;"></span><pre name="code" class="html"><?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE TVSCHEDULE SYSTEM "xml_example.dtd">

<TVSCHEDULE NAME="acb">
	<CHANNEL CHAN="abc">
		<BANNER>abc</BANNER>
		<DAY>
			<DATE>abc</DATE>
			<HOLIDAY>abc</HOLIDAY>
			<HOLIDAY></HOLIDAY>
			<PROGRAMSLOT VTR="abc">
				<TIME>abc</TIME>
				<TITLE LANGUAGE="abc" RATING="abc">abc</TITLE>
				<DESCRIPTION>abc</DESCRIPTION>
			</PROGRAMSLOT>
		</DAY>

	</CHANNEL>

</TVSCHEDULE>







二、 今天还学习到有关xml读取加载的一些基本操作

1)首先有一个xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<Location>
    <State Name="北京" Code="11">
      <City Name="东城" Code="1" />
      <City Name="西城" Code="2" />
      <City Name="朝阳" Code="5" />
      <City Name="丰台" Code="6" />
      <City Name="石景山" Code="7" />
      <City Name="海淀" Code="8" />
</State>
    <State Name="天津" Code="12">
      <City Name="和平" Code="1" />
      <City Name="河东" Code="2" />
      <City Name="河西" Code="3" />
      <City Name="南开" Code="4" />
</State>
    <State Name="河北" Code="13">
      <City Name="石家庄" Code="1">
        <Region Name="长安区" Code="2" />
        <Region Name="桥东区" Code="3" />
        <Region Name="桥西区" Code="4" />
        <Region Name="新华区" Code="5" />
      </City>
 </State>
</Location>

2)、编写一个程序是用来加载xml文件的

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
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 xml_example1 {

	/**
	 * @param args
	 * @throws Exception
	 */
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		//查找xml,首先创建DocumentBuilderFactory实例
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		//通过DocumentBuilderFactory实例来创建DocumentBuilder实例
		DocumentBuilder builder = factory.newDocumentBuilder();
		//通过DocumentBuilder的实例调用parse的方法来读取xml文件
		Document doc = builder.parse("src/LocList.xml");

           test04(doc);
	}

//1、遍历所有的节点
	public static void test01(Document doc){
		Node item = doc.getElementsByTagName("Location").item(0);

		//调用子节点的递归函数
		getChilderNode(item);
	}

	private static void getChilderNode(Node node) {
		// TODO Auto-generated method stub
		//先得到当前的节点如果节点的类型是元素,则打印
		if(node.getNodeType() == Node.ELEMENT_NODE){
			System.out.println(node.getNodeName());
		}
		//再得到这个元素下的子元素遍历之,在递归
		NodeList nodeList = node.getChildNodes();
		for(int i=0;i<nodeList.getLength();i++){
			Node item = nodeList.item(i);
			getChilderNode(item);
		}
	}

	//2、查询某一个节点
		//2.1找寻名字为“东城”的节点和其他的属性
	public static void test02(Document doc){
		Element selement = (Element) doc.getElementsByTagName("State").item(0);
		Element celement = (Element) selement.getElementsByTagName("City").item(0);

		//System.out.println(celement.getTextContent());
		//得到了名为“东城”这个city下的Name属性和Code属性
		System.out.println(celement.getAttribute("Name"));
		System.out.println(celement.getAttribute("Code"));

		//得到City里面的文本内容
		int index = selement.getElementsByTagName("City").getLength();
		Element c = (Element) selement.getElementsByTagName("City").item(index-1);

		System.out.println(c.getTextContent());
	}

	//3、修改某一个节点
		//3.1添加一个State
	public static void test03(Document doc) throws Exception{
		Element element = doc.createElement("State");

		//3.2在state元素中添加属性Name和Code
		element.setAttribute("Name", "广东");
		element.setAttribute("Code", "120");

		//3.3在state中添加City和其他属性
		Element celement = doc.createElement("City");
		celement.setAttribute("Name","翁源");
		celement.setAttribute("Code", "515");
		celement.setTextContent("龙仙");

		element.appendChild(celement);

		Node root = doc.getElementsByTagName("Location").item(0);
		root.appendChild(element);

		//1、通过TransformerFactory来创建实例,调用newInstance方法
		TransformerFactory transformerFactory = TransformerFactory.newInstance();
		//2、通过TransformerFactory的实例来创建newTransformer对象
		Transformer transformer = transformerFactory.newTransformer();
		//3、用Transformer的对象的transform方法来修改xml文件
		transformer.transform(new DOMSource(),new StreamResult("src/LocList.xml"));

	}

	public static void test04(Document doc) throws Exception{

		Element selement = (Element) doc.getElementsByTagName("State").item(1);
		Element celement = (Element) selement.getElementsByTagName("City").item(6);
		celement.removeAttribute("Name");

		Element celement1 = (Element) selement.getElementsByTagName("City").item(7);
		selement.removeChild(celement1);

		//1、通过TransformerFactory来创建实例,调用newInstance方法
		TransformerFactory transformerFactory = TransformerFactory.newInstance();
		//2、通过TransformerFactory的实例来创建newTransformer对象
		Transformer transformer = transformerFactory.newTransformer();
		//3、用Transformer的对象的transform方法来修改xml文件
		transformer.transform(new DOMSource(),new StreamResult("src/LocList.xml"));

	}

}

通过这几个案例我能够基本了解到了,关于xml和dtd 的相关知识

时间: 2024-10-12 07:51:44

javaee之xml和dtd的基础练习的相关文章

理清XML,HTML,DTD,Schema,户阿由

其实我是很厉害的段子手,吹逼高手.很久很久以前,有一次,在那个那个地方...(啪)卢本伟闭嘴==! 1.HTML和XML没啥关系,XML和DTD,Schema比较亲近. 2.HTML是显示数据.XML是传输存储数据.(至于定义什么的自己去搜着看,我主要是了解他们干嘛的.) 3.DTD是一种语法规则,它用来规则XML文档怎么怎么写. 4.Schema就牛逼了,基于XML,只是功能比DTD更丰富,但是最最根本的目标,和DTD一样,为了让XML更方便写,传输存储处理数据上功能更强大. 5.DTD和Sc

jdom dom4j解析xml不对dtd doctype进行验证(转)

一.写在所有之前:因为dom4j和jdom在这个问题上处理的方法是一模一样的,只是一个是SAXBuilder 一个SAXReader,这里以jdom距离,至于dom4j只需要同理替换一下就可以了.二.问题发生的情况当你用jdom读取一个有dtd验证的xml文件,同时你的网络是不通的情况下.会出现以下错误:1,代码如下 package dom;import java.io.File;import org.jdom.Document;import org.jdom.input.SAXBuilder;

【PHP XML与dtd概述【完整版】】

一.XML文件简介 关于XML的大多数人都知道一些,HTML->xhtml->xml,这个顺序本来应当是HTML发展的顺序. XML可以当做配置文件使用,还可以充当小型的数据库. version:文档符合xml1.0规范,我们学习的一般都是1.0encoding:文档字符编码,比如gb2312,一般使用utf-8standalone:文档定义是否独立使用standalone="yes",表名文档独立使用standalone="no":默认 XML文档有且

xml约束DTD演示

此演示xml和DTD在一个文件中 book.xml <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE 书架 [ <!ELEMENT 书架 (书+)> <!ELEMENT 书 (书名,作者,售价)> <!ELEMENT 书名 (#PCDATA)> <!ELEMENT 作者 (#PCDATA)> <!ELEMENT 售价 (#PCDATA)> &

XML之DTD(2)

接上一篇<XML之DTD(1)>        DTD实体       实体是用于定义引用普通文本或特殊字符的快捷方式的变量. 实体引用是对实体的引用. 实体可在内部或外部进行声明. 一个内部实体声明:          语法: <!ENTITY 实体名称 "实体的值"> DTD例子: <!ENTITY writer "Bill Gates"> <!ENTITY copyright "Copyright W3Sch

【php基础】XML,DTD实例

要求一:能看懂别人写的DTD文件,自己能写更好.例如products.dtd: 1 <!ENTITY AUTHOR "John Doe"> 2 <!ENTITY COMPANY "JD Power Tools, Inc."> 3 <!ENTITY EMAIL "[email protected]"> 4 5 <!ELEMENT CATALOG (PRODUCT+)> 6 7 <!ELEMENT

XML的DTD和Schema约束

为什么要使用约束? XML是自定义的标签,有时候标签太多,记不住,所以就需要有约束来告诉我能写哪些标签,哪些标签写错了不能识别 XML中有哪几种约束? 有很多约束,其中DTD和Schema约束最为常见. 约束本质上是什么? 约束本质上也是一种xml文件. DTD约束和Schema约束的区别 特点的区别: DTD约束较为古老,简单,一些老框架使用DTD作为约束:Struts2和Hibernate都使用DTD作为其XML配置文件的约束 Schema约束功能更为强大,用的更为广泛,Tomcat和Spr

JavaEE实战——XML语法和约束技术

MyEclipse8.5 1.配置workspace ----- 建议不要采用含有空格和中文目录,所有代码保存workspace空间中 2.新建工程时,设置工程需要jre环境 MyEclipse提供多种内置layout --- 每种布局 界面不同,菜单不同 工程的属性 编码集 --- 导入其它工程时,注意编码类型一致 java build path 设置 classpath位置 ,指定当前工程引入类库 source中指定.java 文件 和.class文件 存放位置 librialies 指定当

第1天 XML和DTD、schema约束

1.xml * 扩展名:*.xml * 作用:存储.配置 一个XML文件分为如下几部分内容:文档声明.元素.属性.注释  CDATA区.特殊字符.处理指令(processing instruction). 1.1文档声明 最简单的声明语法: <?xml version="1.0" ?> version:设置当前xml文档内容使用的版本 用encoding属性说明文档的字符编码: <?xml version="1.0" encoding="