java基础第二十三天——解析XML文件和DTD约束
Posted 名字真的很急用
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java基础第二十三天——解析XML文件和DTD约束相关的知识,希望对你有一定的参考价值。
反射注意点:
当我们利用反射获取src下的.properties文件时,我们利用IO流获取文件的路径时可以这样写:
InputStream stream = Demo1.class.getClassLoader().
getResourceAsStream("person.properties");
-
开发中,要把所有配置文件写入src底下
-
Demo1.class.getClassLoader(). getResourceAsStream //项目的资源路径(根路径) 不要带中文名
-
XML文件:(JavaEE)
- 存储数据的(配置文件)
- Extensible :扩展
- Marup :标记
- Language:语言
一:XML的特点
- 作用
- 用于存储数据
- 传输数据
- 优点
- 可读性好
- 维护性好
二:XML语言的语法
-
区分大小写
-
XML 必须正确地嵌套
-
XML 文档必须有根元素
-
XML 的属性值须加引号
-
<Person> <p1> <name>abc</name> <age>12</age> </p1> </Person>
1:在标签语言中<>中只有一个单词,该单词就被称为元素标签 2:在标签语言中<单词> 在单词后跟的所有的单词,后跟单词都被称为属性标签。它可以赋值
四:解析XMl
-
getRootElement():获取根元素
-
获取所有的子元素
-
Elements():获取所有的元素
-
Elements(“标签名”) :获取指定的所有元素
-
Element():获取单个的
-
Element(String str) :获取指定元素的
//获取所有的子元素 Element
elements():
elements(Stirng e):
//获取指定的单个字
element(String s):
//获取属性
Attribute attribute():
//获取属性值 Attribute
getVaule:
//获取元素值
getText() : Element
-
package day01;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.util.Iterator;
import java.util.List;
public class demo1 {
public static void main(String[] args) throws Exception {
//创建解析器
SAXReader reader = new SAXReader();
String path = demo1.class.getClassLoader().getResource("person.xml").getPath();
//读取文档
Document document = reader.read(path);
// System.out.println(document);
//解析根目录
//Element[] getRootElements()
//返回定义的所有根元素。
Element rootElement = document.getRootElement();
//* Elements():获取所有的元素
//List elements = rootElement.elements();
/* Iterator<Element> it = elements.iterator();
while(it.hasNext()){
Element ent =it.next();
List<Attribute> attributes = ent.attributes();
Iterator<Attribute> iterator = attributes.iterator();
while(iterator.hasNext()){
Attribute a=iterator.next();
if(a.getValue().equals("a")){
//System.out.println(a.getValue());
Element sid = ent.element("name");
Element age = ent.element("age");
System.out.println(sid.getText());
System.out.println(age.getText());
}
}
}*/
//获取所有的子元素 Element
// elements():
//elements(Stirng e): e 为属性名
//获取指定的单个字
// element(String s): s为属性名称
//* Elements("标签名") :获取指定的所有元素
/* List p = rootElement.elements("p");
Iterator<Element> iterator = p.iterator();
while(iterator.hasNext()){
Element e =iterator.next();
List<Element> name = e.elements("name");
for(Element s:name){
System.out.println(s.getText());
}
}*/
//* Element("标签名") :获取指定元素的
/* Element b = rootElement.element("b");
Attribute attribute = b.attribute(0);
System.out.println(attribute.getValue());*/
/* List<Element> p = rootElement.elements("p");
for(Element s:p){
List<Attribute> attributes = s.attributes();
for(Attribute A:attributes){
System.out.println(A.getValue());
}
}
*/
/* List<Element> p = rootElement.elements("p");
Iterator<Element> iterator = p.iterator();
while (iterator.hasNext()){
Element next = iterator.next();
if(next.attribute("int")!=null){
System.out.println(next.attribute("int").getValue());
}
}*/
//Attribute attribute(int index)
//Attribute attribute(QName qName)
// Attribute attribute(String name)
// List attributes()
//获取属性值 Attribute
//getVaule:
//获取元素值
// getText() : Element
List<Element> p = rootElement.elements("p");
//Iterator<Element> iterator = p.iterator();
Iterator<Element> iterator = p.iterator();
while(iterator.hasNext()){
Element next = iterator.next();
if(next.attribute(0)!=null) {
System.out.println(next.attribute(0).getValue());
}
}
}
}
五:约束(xml)
- 用来限定XML文件中使用的标签以及属性
- 约束分类
- DTD
- schema
六:编写DTD约束的步骤
-
1:创建一个文件,文件的后缀.dtd 2:看xml使用了哪些元素 <!ELEMENT> 可以定义元素 3:判断元素是简单元素还是复杂元素(简单:自个儿 负责:有子元素) 简单元素: <!ELEMENT 元素名称> 复杂元素:<!ELEMENT 元素名称(子元素名称,子元素名称)>
-
引入约束的三种格式
-
引入本地: <!DOCTYPE 根元素名称 SYSTEM 'DTD文件路径'> 在XML内部引用: <!DOCTYPE 根元素名称[dtd文件内容] 引入网络DTD <!DOCTYPE 根元素名称 PUBLIC"DTDT文件名称" "DTD的文档URL">
DTD案例
<!ELEMENT Student(student)> <!ELEMENT student(sid,sname)> <!ELEMENT sid(#PCDATA)> <!ELEMENT sname(#PCDATA)>
-
-
定义属性的格式
-
<!ATTLIST 元素名称 属性名称 属性类型 类型>
-
六:Schema
- schema和dtd区别?
- .xsd
- 一个XML文件中可以引入多个schema约束文件,多个schema使用名称空间区分
- dtd元素取值比较单一,最常见的PCDATA类型,但是在Schema约束文件中可以支持很多个数据类型
- 语法更加复杂
以上是关于java基础第二十三天——解析XML文件和DTD约束的主要内容,如果未能解决你的问题,请参考以下文章