申明:内容大多来自传智播客黑马
a.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!--
这是注释
SYSTEM 系统硬盘位置
PUBLIC 网络公共位置,如"a.dtd" "www.a.com"
-->
<!-- 外部引入 -->
<!DOCTYPE 人 SYSTEM "a.dtd">
<!-- 内部引入
<!DOCTYPE 人 [
<!ELEMENT 人 (国家+,其他国家,其他说明)>
<!ELEMENT 国家 (姓名,年龄)>
<!ELEMENT 姓名 (#PCDATA)>
<!ELEMENT 年龄 (#PCDATA)>
<!ELEMENT 其他国家 (#PCDATA)>
<!ELEMENT 其他说明 (#PCDATA)>
]>
-->
<人>
<国家 value="China" 首都="北京">
<姓名>张三</姓名>
<年龄>35</年龄>
</国家>
<国家 value="USA" 首都="华盛顿">
<姓名>Tom&Welon</姓名>
<年龄>25</年龄>
</国家>
<其他国家/>
<其他说明>
<![CDATA[转义的内容为<name>]]>
</其他说明>
<m>
<随便放1></随便放1>
<随便放2></随便放2>
<随便放3></随便放3>
</m>
<n></n>
<o>
<z></z>
</o>
</人>
a.dtd
<!ELEMENT 人 (国家+,其他国家,其他说明,m,n,o)>
<!ELEMENT 国家 (姓名,年龄)>
<!ATTLIST 国家 value ID #REQUIRED>
<!ATTLIST 国家 首都 CDATA #REQUIRED>
<!ATTLIST 国家 人口 CDATA #IMPLIED>
<!ATTLIST 国家 所属星球 CDATA #FIXED "地球">
<!ATTLIST 国家 所属星系球 CDATA "太阳系">
<!ATTLIST 国家 世界经济排名 (第一|第二|第三) "第一">
<!ELEMENT 姓名 (#PCDATA)>
<!ELEMENT 年龄 (#PCDATA)>
<!ELEMENT 其他国家 EMPTY>
<!ELEMENT 其他说明 (#PCDATA)>
<!ELEMENT m ANY>
<!ELEMENT n EMPTY>
<!ELEMENT o ((x*, y?, z)* | p)>
<!ELEMENT x (#PCDATA)>
<!ELEMENT y (#PCDATA)>
<!ELEMENT z (#PCDATA)>
<!ELEMENT p (#PCDATA)>
注:现阶段dtd用的不多,主要用的是Schea,有替代dtd之意
解析XML主要有两种思想:dom和sax
JDK自带解析方式(SAX)简介:
B.xml
<?xml version="1.0" encoding="UTF-8"?>
<test>
<a name="a">
<a1>a1</a1>
<a2>a2</a2>
<a3>a3</a3>
</a>
<b name="b"/>
<c>
<c1 name="c1">c1</c1>
</c>
</test>
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
public class SAX {
public static void main(String[] args) throws Exception {
//1.获取解析器工厂
SAXParserFactory factory = SAXParserFactory.newInstance();
//2.通过工厂获取sax解析器
SAXParser parser = factory.newSAXParser();
//3.获取读取器
XMLReader reader = parser.getXMLReader();
//4.注册事件处理器
reader.setContentHandler(new MyContentHandler2());
//5.解析xml
reader.parse("B.xml");
}
}
//适配器设计模式
class MyContentHandler2 extends DefaultHandler{
@Override
public void startElement(String uri,String localName,String name,Attributes attributes) throws SAXException {
System.out.println(name);//开始标签
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
String str = new String(ch,start,length);
if(!str.trim().equals("")){
System.out.println(str);
}
}
@Override
public void endElement(String uri, String localName, String name) throws SAXException {
System.out.println(name);//结束标签
}
}
class MyContentHandler implements ContentHandler{
public void startDocument() throws SAXException {
System.out.println("文档解析开始了.......");
}
public void startElement(String uri,String localName,String name,Attributes atts) throws SAXException {
System.out.println("发现了开始标签,"+name);
}
public void characters(char[] ch, int start, int length) throws SAXException {
System.out.println(new String(ch,start,length));
}
public void endElement(String uri, String localName, String name) throws SAXException {
System.out.println("发现结束标签,"+name);
}
public void endDocument() throws SAXException {
System.out.println("文档解析结束了.......");
}
public void endPrefixMapping(String prefix) throws SAXException {
// TODO Auto-generated method stub
}
public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {
// TODO Auto-generated method stub
}
public void processingInstruction(String target, String data) throws SAXException {
// TODO Auto-generated method stub
}
public void setDocumentLocator(Locator locator) {
// TODO Auto-generated method stub
}
public void skippedEntity(String name) throws SAXException {
// TODO Auto-generated method stub
}
public void startPrefixMapping(String prefix, String uri) throws SAXException {
// TODO Auto-generated method stub
}
}
dom4j解析方式简介:
import java.io.FileOutputStream;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.Test;
public class DomTest {
private final static String URL = "B.xml";
public static void main(String[] args) throws Exception{
//1.获取解析器
SAXReader reader = new SAXReader();
//2.解析xml获取代表整个文档的dom对象
Document dom = reader.read(URL);
//3.获取根节点
Element root = dom.getRootElement();
//4.获取节点进行打印
String tag = root.element("a").element("a2").getText();
System.out.println(tag);
}
@Test
public void find() throws Exception{
SAXReader reader = new SAXReader();
Document dom = reader.read(URL);
Element root = dom.getRootElement();
List<Element> list = root.elements();
Element subEle = list.get(2);
System.out.println(subEle.element("c1").getText());
}
@Test
public void add()throws Exception{
SAXReader reader = new SAXReader();
Document dom = reader.read(URL);
Element root = dom.getRootElement();
Element newEle = DocumentHelper.createElement("c2");
newEle.setText("c2");
Element upEle = root.element("c");
upEle.add(newEle);
//将内存中的dom树会写到xml文件中,从而使xml中的数据进行更新
//FileWriter writer = new FileWriter(URL);
//dom.write(writer);
//writer.flush();
//writer.close();
XMLWriter writer = new XMLWriter(new FileOutputStream(URL),OutputFormat.createPrettyPrint());
writer.write(dom);
writer.close();
}
@Test
public void update()throws Exception{
SAXReader reader = new SAXReader();
Document dom = reader.read(URL);
Element root = dom.getRootElement();
root.element("a").element("a1").setText("a4");
XMLWriter writer = new XMLWriter(new FileOutputStream(URL),OutputFormat.createPrettyPrint());
writer.write(dom);
writer.close();
}
@Test
public void del() throws Exception{
SAXReader reader = new SAXReader();
Document dom = reader.read(URL);
Element root = dom.getRootElement();
Element subEle = root.element("c").element("c2");
subEle.getParent().remove(subEle);
XMLWriter writer = new XMLWriter(new FileOutputStream(URL),OutputFormat.createPrettyPrint());
writer.write(dom);
writer.close();
}
@Test
public void attr() throws Exception{
SAXReader reader = new SAXReader();
Document dom = reader.read(URL);
Element root = dom.getRootElement();
Element subEle = root.element("c");
subEle.addAttribute("key", "value");
//String str = subEle.attributeValue("key");//value
//System.out.println(str);
Attribute attr = subEle.attribute("key");
attr.getParent().remove(attr);
XMLWriter writer = new XMLWriter(new FileOutputStream(URL),OutputFormat.createPrettyPrint());
writer.write(dom);
writer.close();
}
}
另:其实W3C是个学习的好地方,可以在那里学习到DTD、XmlSchema、XPATH等等
分享到:
相关推荐
XML的设计目标是传输和存储数据,而不是显示数据,因此它的主要焦点在于数据的结构化和标准化,而非数据的外观。...无论你是网页开发者、软件工程师还是数据管理人员,XML基础知识的掌握都将对你的工作带来极大的帮助。
总结来说,XML基础知识涉及XML文档的结构、实体的使用、特殊字符的实体引用以及不受解析的CDATA段。理解这些概念对于创建和处理XML文档至关重要,因为它们确保了数据的准确性和一致性。在实际应用中,XML广泛用于...
根据提供的文件信息,我们可以整理出一系列关于XML的基础知识点,这些...以上就是从题目中提取出来的XML基础知识要点。这些知识点覆盖了XML的基本概念、语法、元素定义、属性使用等方面,对于理解和掌握XML非常有帮助。
XML基础知识 XML(Extensible Markup Language)是一种标记语言,主要用于存储和传输数据。它与HTML相似,但有着不同的功能和特点。XML的主要应用场景是在企业开发中用于数据交换和配置文件。 XML的功能 * 用于...
在本文中,我们将深入探讨XML的基础知识,包括它的结构、语法、解析方式以及在IT行业中的应用。 一、XML简介 XML起源于1998年,由万维网联盟(W3C)制定,它是一种可扩展的标记语言,旨在替代HTML,因为HTML主要...
以下是XML基础知识的一些关键点: 1. XML的基本结构: - **文档声明**:XML文档开头通常包含一个文档声明,例如 `<?xml version="1.0" encoding="UTF-8"?>`,定义了XML的版本和字符编码。 - **元素**:XML中的...
### XML基础知识详解 #### 一、XML概述 **XML**(可扩展标记语言,Extensible Markup Language)是一种标记语言,其设计目的是为了传输和存储数据。与HTML相比,XML更侧重于数据的描述而非展示。XML的核心优势在于...
模块一 XML基础知识及XML与HTML的区别.doc
xml基础,xml语言的定义,xml的数据岛,xml结点的设置、获取。
DOM初步 DOM是Document Object Model的缩写,即文档对象模型。...通俗的说,就是通过解析XML文档,为XML文档在逻辑上建立一个树模型,树的节点是一个个对象。我们通过存取这些对象就能够存取XML文档的内容。
1. XML基础 - **XML简介**:XML是一种文本格式的语言,它定义了一套规则,使得机器和人都能理解数据的含义。XML标签不是预定义的,而是由用户自创,这使得XML能够适应各种领域和行业的数据表示。 - **XML用途**:...
HTML的诞生(1989年)改变了这一局面,HTML成为了超文本传输协议的基础,推动了万维网(WWW)的发展。HTML的简单性和广泛适用性使其迅速从1.0版本发展到4.0,但随着需求的增长,HTML变得过于复杂,失去了原有的简洁...
XML的基础知识主要包括以下几个方面: 1. **XML文档结构**:XML文档由三部分组成:声明、元素和属性。声明部分通常以`<?xml version="1.0" encoding="UTF-8"?>`开始,定义文档的版本和字符编码。元素是XML的核心,...
了解XML的基础知识,并掌握其核心特性,对于在当今信息化世界中有效地处理数据、实现系统间的无缝协作至关重要。随着XML技术的不断成熟和应用的日益广泛,我们可以预见它将在未来继续在数据处理和交换领域占据核心...
对学习xml的人来说这套电子文稿非常有帮助,希望大家加以利用
XML(Extensible Markup Language)即可扩展标记语言,是互联网上用于标记文档的语言,用于描述数据的结构和内容。其设计目标是传输和存储数据,特别是跨不同系统和平台。XML的核心优势在于能够通过其标记让数据在...