1.xml名称空间通过一系列属性来声明,这些属性的名字必须是xmlns或以xmlns:作为前缀
2.名称空间声明的两个形式:
<元素名 xmlns:prefixname="URI"> 其中prefixname表示名称空间前缀
<元素名 xmlns="URI"> 声明了一个缺省的名称空间,表示该元素及其内容中所有没有前缀的元素都属于该缺省名称空间。
【注意】:在声明名称空间时,选择的URI不需要指向实际内容,也可以不存在任何东西,它只是形式上的标识符,唯一目的是提供一个唯一的名字。
3.xml文档解析API:DOM、SAX
DOM:document object model, W3C官方推荐
SAX:simple API for xml, xml社区标准
DOM和SAX只是定义了标准接口,没有实现
4.Apache的Xerces是一个应用广泛的解析器,它实现了DOM和SAX的接口。如SAX定义的解析器接口是org.xml.sax.XMLReader,Xerces中提供的实现类是org.apache.xerces.parsers.SAXParser,在应用程序中可以采用如下方式访问XML文档:
org.xml.sax.XMLReader sp= new org.apache.xerces.parsers.SAXParser();
FileInputStream fis = new FileInputStream("test.xml");
InputSource is = new InputSource(fis);
sp.setContentHandler(new MyContentHandler());//设置内容事件处理器
sp.parse(is);
其它的解析器还有oracle的xdk
5、JAXP(Java API for XML Process)
屏蔽了不同厂商解析器的具体实现,可以是开发人员以一种标准的方式对XML编程
6.使用DOM接口解析xml文件的步骤:
(1)得到工程类实例 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
(2)利用工程类实例获得DOM解析器对象:DocumentBuilder db = dbf.newDocumentBuilder();
(3)利用解析器对象的parse方法解析XML文档,返回一个表示整个文档的documen对象:
Document doc = db.parse("src/Student.xml");
7.JDOM解析xml文档:
获得SAXBuilder对象实例:SAXBuilder saxbd = new SAXBuilder();
获得表示整个文档的Document对象:Document doc = saxbd.build("Student.xml");
获得xml文档的跟节点:Element root = doc.getRootElement();
处理.........
输出,获得输出对象:XMLOutputter xmlout = new XMLOutputter();
设置输出格式:Format fm =Format.getPrettyFormat();fm.setIndent(" ");xmlout.setFormat(fm);
输出回文件:xmlout.output(doc, new FileOutputStream("src/Student.xml"));
输出到标准输出:xmlout.output(doc, System.out);
可见,用JDOM处理XML文档要比直接用DOM API要简化和方便得多。
8、DOM4J 比JDOM具有更好的灵活性,性能也全面优于JDOM.
DOM4J采用了访问者模式对xml文档进行解析和访问,编程时只要实现一个继承自VisitorSupport类(该类实现了DOM4J的Visitor接口,但是都是空实现)即可,例如:
public class VisitorTest {
/**
* 以访问者模式解析XML文档。访问者模式通常用于处理对象树结构,树种的每一个节点都可以
* 接收一个访问者对象,节点对象向访问者对象传递自身,而访问者对象调用节点对象的操作。
* 这这种模式一般用于节点类型比较固定的应用。
*/
public static void main(String[] args) {
SAXReader sr = new SAXReader();
try {
Document doc = sr.read(new File("src/Student.xml"));
doc.accept(new MyVisitor());
} catch (DocumentException e) {
e.printStackTrace();
}
}
}
class MyVisitor extends VisitorSupport{
public void visit(Attribute node) {
System.out.println("Attribute: " + node.getName() + "="+node.getValue());
}
public void visit(Element node) {
if (node.isTextOnly()){
System.out.println("Element: " + node.getName() + " "+ node.getText());
}else{
System.out.println("---------" + node.getName() +"--------");
}
}
public void visit(ProcessingInstruction node) {
System.out.println("PI: " + node.getTarget() + " " +node.getText());
}
}
DOM4J保存xml文档:
OutputFormat fm = new OutputFormat(" ",true);
try {
XMLWriter xw = new XMLWriter(newFileWriter("student1.xml"),fm);
xw.write(doc);
xw.flush(); //刷新缓冲,否则缓冲区的内容不会立即写入文件
} catch (IOException e) {
e.printStackTrace();
}
2.名称空间声明的两个形式:
<元素名 xmlns:prefixname="URI"> 其中prefixname表示名称空间前缀
<元素名 xmlns="URI"> 声明了一个缺省的名称空间,表示该元素及其内容中所有没有前缀的元素都属于该缺省名称空间。
【注意】:在声明名称空间时,选择的URI不需要指向实际内容,也可以不存在任何东西,它只是形式上的标识符,唯一目的是提供一个唯一的名字。
3.xml文档解析API:DOM、SAX
DOM:document object model, W3C官方推荐
SAX:simple API for xml, xml社区标准
DOM和SAX只是定义了标准接口,没有实现
4.Apache的Xerces是一个应用广泛的解析器,它实现了DOM和SAX的接口。如SAX定义的解析器接口是org.xml.sax.XMLReader,Xerces中提供的实现类是org.apache.xerces.parsers.SAXParser,在应用程序中可以采用如下方式访问XML文档:
org.xml.sax.XMLReader sp= new org.apache.xerces.parsers.SAXParser();
FileInputStream fis = new FileInputStream("test.xml");
InputSource is = new InputSource(fis);
sp.setContentHandler(new MyContentHandler());//设置内容事件处理器
sp.parse(is);
其它的解析器还有oracle的xdk
5、JAXP(Java API for XML Process)
屏蔽了不同厂商解析器的具体实现,可以是开发人员以一种标准的方式对XML编程
6.使用DOM接口解析xml文件的步骤:
(1)得到工程类实例 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
(2)利用工程类实例获得DOM解析器对象:DocumentBuilder db = dbf.newDocumentBuilder();
(3)利用解析器对象的parse方法解析XML文档,返回一个表示整个文档的documen对象:
Document doc = db.parse("src/Student.xml");
7.JDOM解析xml文档:
获得SAXBuilder对象实例:SAXBuilder saxbd = new SAXBuilder();
获得表示整个文档的Document对象:Document doc = saxbd.build("Student.xml");
获得xml文档的跟节点:Element root = doc.getRootElement();
处理.........
输出,获得输出对象:XMLOutputter xmlout = new XMLOutputter();
设置输出格式:Format fm =Format.getPrettyFormat();fm.setIndent(" ");xmlout.setFormat(fm);
输出回文件:xmlout.output(doc, new FileOutputStream("src/Student.xml"));
输出到标准输出:xmlout.output(doc, System.out);
可见,用JDOM处理XML文档要比直接用DOM API要简化和方便得多。
8、DOM4J 比JDOM具有更好的灵活性,性能也全面优于JDOM.
DOM4J采用了访问者模式对xml文档进行解析和访问,编程时只要实现一个继承自VisitorSupport类(该类实现了DOM4J的Visitor接口,但是都是空实现)即可,例如:
public class VisitorTest {
/**
* 以访问者模式解析XML文档。访问者模式通常用于处理对象树结构,树种的每一个节点都可以
* 接收一个访问者对象,节点对象向访问者对象传递自身,而访问者对象调用节点对象的操作。
* 这这种模式一般用于节点类型比较固定的应用。
*/
public static void main(String[] args) {
SAXReader sr = new SAXReader();
try {
Document doc = sr.read(new File("src/Student.xml"));
doc.accept(new MyVisitor());
} catch (DocumentException e) {
e.printStackTrace();
}
}
}
class MyVisitor extends VisitorSupport{
public void visit(Attribute node) {
System.out.println("Attribute: " + node.getName() + "="+node.getValue());
}
public void visit(Element node) {
if (node.isTextOnly()){
System.out.println("Element: " + node.getName() + " "+ node.getText());
}else{
System.out.println("---------" + node.getName() +"--------");
}
}
public void visit(ProcessingInstruction node) {
System.out.println("PI: " + node.getTarget() + " " +node.getText());
}
}
DOM4J保存xml文档:
OutputFormat fm = new OutputFormat(" ",true);
try {
XMLWriter xw = new XMLWriter(newFileWriter("student1.xml"),fm);
xw.write(doc);
xw.flush(); //刷新缓冲,否则缓冲区的内容不会立即写入文件
} catch (IOException e) {
e.printStackTrace();
}