通过学习,我先自己写了一个dtd
什么是dtd呢,不懂的同学可以自己百度,我这里也就简单说明一下。
dtd就是一个约束xml书写内容的文档。
比如xml里存学生的信息,dtd就告诉你xml里应该存放一些什么数据,格式是什么,应该怎么放。
以下便是我照着教材写(实际上是copy啦)下来的一个简单的dtd.里面约束了xml里应该包括学生集合,每一个学生集合(studens)里的每一个学生(student)包含的子元素有name、age、sex。然后student还有一个属性,名字叫number,它是标识student的关键,是不可重复的
(注意,这个DTD的文件名是DT.dtd)
<!ELEMENT students (student*)>
<!ELEMENT student (name,age,sex)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ATTLIST student number ID #REQUIRED>
之后我写了一个xml。随便写了2个人。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE students SYSTEM "DT.dtd">
//上面这句话是说该xml是按照DT.dtd来写的
<students >
<student number="s001">
<name>tom</name>
<age>19</age>
<sex>male</sex>
</student>
<student number="s002">
<name>lisa</name>
<age>20</age>
<sex>female</sex>
</student>
</students>
之后就可以欢快的在Java文件里码代码啦
不过在利用java读取xml里的数据时,要明确java取出xml数据分4步
1.首先建立工厂解析器
2.利用工厂解析器建立解析器
3.利用解析器获取document对象
4.操作document对象去输出xml的内容
java代码如下:
package xml;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class xmjava {
public static void main(String[] args) throws ParserConfigurationException, Exception, Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
//创建工厂解析器
DocumentBuilder db = dbf.newDocumentBuilder();
//利用工厂创造一个解析器
Document doc = db.parse("src\\xml\\xmlxx.xml");
//通过解析器获得document对象
NodeList list = doc.getElementsByTagName("name");
//获得节点名字获取节点内容
Node name=list.item(0);
//只能用item获得序号节点
System.out.println(name.getTextContent());
//取得节点里的内容~
}
}
注意,在写解析器的时候,无论是创建解析器工厂还是解析器,eclipse总会报错,你就按照系统提示点击抛出错误就行了,系统就会自动在main函数上面添加抛出异常。这就没关系了。
然后记得在获取节点序号的时候,是用item方法,取得节点里的内容的时候,要根据你取出来的东西换方法。此处我取出来的是文本内容,因此用的是getTextContent()方法。
好了希望能帮到大家一点点。
另外,我在弄这个的时候也并非一帆风顺,一开始我的dtd文件不是这么写的,在网上搜索到的dtd的格式有些不太对,按照我上面写的这种格式就没错了。
然后在xml文件里导入dtd说明的时候,一定要注意导入的文件名不要写错。
在Java文件中,千万记得获取document对象时,那个parse里的路径是从src开始的,前面不要加点。只要把xml文件properties里的那个路径从src开始全部复制下来就ok了。
祝大家学习愉快~
可能写的东西有些低端,但是只要在进步就好啦!(^▽^)!