`
taimukang
  • 浏览: 180697 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

XML知识点备忘

阅读更多
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();
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics