`

XSLT dom4j Parsing XML xml 创建与解析

 
阅读更多

       最近设计一个数据同步操作!将data 封装为xml ,然后发送给webservices 进行解析! xml 的常用代码如下!

Parsing XML


    
或许你想要做的第一件事情就是解析一个某种类型的XML文档,用dom4j很容易做到。请看下面的示范代码:

import java.net.URL;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;

public class Foo {

    public Document parse(URL url) throws DocumentException {
        SAXReader reader = new SAXReader();
        Document document = reader.read(url);
        return document;
    }
}

使用迭代器(Iterators
    
我们可以通过多种方法来操作XML文档,这些方法返回java里标准的迭代器(Iterators)。例如:

public void bar(Document document) throws DocumentException {
        Element root = document.getRootElement();
        //
迭代根元素下面的所有子元素
        for ( Iterator i = root.elementIterator(); i.hasNext(); ) {
            Element element = (Element) i.next();
            //
处理代码
        }

        //
迭代根元素下面名称为"foo"的子元素
        for ( Iterator i = root.elementIterator( "foo" ); i.hasNext(); ) {
            Element foo = (Element) i.next();
            //
处理代码
        }

        // 
迭代根元素的属性attributes)元素
        for ( Iterator i = root.attributeIterator(); i.hasNext(); ) {
            Attribute attribute = (Attribute) i.next();
            // do something
        }
     }

强大的XPath导航
    
dom4jXPath可以表示出在XML树状结构中的Document或者任意的节点(Node)(例如:AttributeElement 或者ProcessingInstruction等)。它可以使在文档中复杂的操作仅通过一行代码就可以完成。例如:

public void bar(Document document) {
        List list = document.selectNodes( "//foo/bar" );
        Node node = document.selectSingleNode( "//foo/bar/author" );
        String name = node.valueOf( "@name" );
    }

    
如果你想得到一个XHTML文档中的所有超文本链接(hypertext links)你可以使用下面的代码:

    public void findLinks(Document document) throws DocumentException {

        List list = document.selectNodes( "//a/@href" );

        for (Iterator iter = list.iterator(); iter.hasNext(); ) {
            Attribute attribute = (Attribute) iter.next();
            String url = attribute.getValue();
        }
    }
    
如果你需要关于XPath语言的任何帮助,我们强烈推荐这个站点Zvon tutorial他会通过一个一个的例子引导你学习。

快速遍历(Fast Looping
如果你不得不遍历一个非常大的XML文档,然后才去执行,我们建议你使用快速遍历方法(fast looping method),它可以避免为每一个循环的节点创建一个迭代器对象,如下所示:

public void treeWalk(Document document) {
        treeWalk( document.getRootElement() );
    }

    public void treeWalk(Element element) {
        for ( int i = 0, size = element.nodeCount(); i < size; i++ ) {
            Node node = element.node(i);
            if ( node instanceof Element ) {
                treeWalk( (Element) node );
            }
            else {
                // do something....
            }
        }
    }

生成一个新的XML文档对象
    
dom4j中你可能常常希望用程序生成一个XML文档对象,下面的程序为你进行了示范:

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

public class Foo {

    public Document createDocument() {
        Document document = DocumentHelper.createDocument();
        Element root = document.addElement( "root" );

        Element author1 = root.addElement( "author" )
            .addAttribute( "name", "James" )
            .addAttribute( "location", "UK" )
            .addText( "James Strachan" );
        
        Element author2 = root.addElement( "author" )
            .addAttribute( "name", "Bob" )
            .addAttribute( "location", "US" )
            .addText( "Bob McWhirter" );

        return document;
    }
}

将一个文档对象写入文件中
    
将一个文档对象写入Writer对象的一个简单快速的途径是通过write()方法。

        FileWriter out = new FileWriter( "foo.xml" );
        document.write( out );

如果你想改变输出文件的排版格式,比如你想要一个漂亮的格式或者是一个紧凑的格式,或者你想用Writer 对象或者OutputStream 对象来操作,那么你可以使用XMLWriter 类。

import org.dom4j.Document;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

public class Foo {

    public void write(Document document) throws IOException {

        // 
写入文件
        XMLWriter writer = new XMLWriter(
            new FileWriter( "output.xml" )
        );
        writer.write( document );
        writer.close();


        // 
以一种优雅的格式写入System.out对象
        OutputFormat format = OutputFormat.createPrettyPrint();
        writer = new XMLWriter( System.out, format );
        writer.write( document );

        // 
以一种紧凑的格式写入System.out对象
        format = OutputFormat.createCompactFormat();
        writer = new XMLWriter( System.out, format );
        writer.write( document );
    }
}

转化为字符串,或者从字符串转化
    
如果你有一个文档(Document)对象或者任何一个节点(Node)对象的引用(reference),象属性(Attribute)或者元素(Element),你可以通过asXML()方法把它转化为一个默认的XML字符串:

        Document document = ...;
        String text = document.asXML();

如果你有一些XML内容的字符串表示,你可以通过DocumentHelper.parseText()方法将它重新转化为文档(Document)对象:

        String text = "<person> <name>James</name> </person>";
        Document document = DocumentHelper.parseText(text);

通过XSLT样式化文档(Document

    使用Sun公司提供的JAXP APIXSLT 应用到文档(Document)上是很简单的。它允许你使用任何的XSLT引擎(例如:XalanSAXON等)来开发。下面是一个使用JAXP创建一个转化器(transformer),然后将它应用到文档(Document)上的例子:

import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;

import org.dom4j.Document;
import org.dom4j.io.DocumentResult;
import org.dom4j.io.DocumentSource;

public class Foo {

    public Document styleDocument(
        Document document, 
        String stylesheet
    ) throws Exception {

        // 
使用 JAXP 加载转化器
        TransformerFactory factory = TransformerFactory.newInstance();
        Transformer transformer = factory.newTransformer( 
            new StreamSource( stylesheet ) 
        );

        // 
现在来样式化一个文档(Document
        DocumentSource source = new DocumentSource( document );
        DocumentResult result = new DocumentResult();
        transformer.transform( source, result );

        // 
返回经过样式化的文档(Document
        Document transformedDoc = result.getDocument();
        return transformedDoc;
    }
}

 

分享到:
评论

相关推荐

    XML_JAVA指南.rar_WORKING_java Tutorial_java xml_jaxp_xml

    2. 创建解析器:通过工厂的`newDocumentBuilder()`或`newSAXParser()`方法。 3. 解析XML文档:调用解析器的`parse()`方法,传入XML文件的输入流或URL。 4. 处理解析结果:对于DOM,可以通过`org.w3c.dom.Document`...

    xml数据解析

    PULL解析(Pull Parsing)是Android平台上常用的一种轻量级XML解析方式,类似于SAX,也是事件驱动的。与SAX不同的是,PULL解析器由应用程序控制解析过程,按需读取XML数据。这种方式节省内存且易于实现,但同样不...

    XML processing with Java

    在本章节中,我们将深入探讨如何使用Java处理XML文档,主要通过Document Object Model (DOM)、Simple API for XML Parsing (SAX) 和 Extensible Stylesheet Language Transformations (XSLT) 这三种方法来实现。...

    XML.rar_DEMO_delphi XML_xml

    5. **解析(Parsing)**:XML解析器读取XML文档并将其转换为数据结构,以便程序可以处理。有两种解析方式:DOM(Document Object Model)和SAX(Simple API for XML)。DOM将整个文档加载到内存中,适合小型文档;SAX...

    XML.rar_c xml_xml

    6. **解析(Parsing)**:XML解析器读取XML文档,验证其结构是否符合规范,并将数据转换为可操作的对象或数据结构。 7. **XPath**:一种在XML文档中查找信息的语言,可以根据路径表达式选取节点,方便数据提取。 8...

    xml处理

    - 库和框架:如Java的JAXB、DOM4J,Python的lxml,C#的System.Xml等,提供XML处理的API。 7. 源码分析: 博文可能分享了一段处理XML的代码示例,讲解了如何在实际项目中应用上述概念。 综上所述,XML处理涉及一...

    XML案例

    6. **解析(Parsing)**:将XML文档转换为可操作的数据结构,如DOM(Document Object Model)或SAX(Simple API for XML)。 7. **XPath(XML Path Language)**:用于选取XML文档中的节点,如元素、属性、文本等。 ...

    xml操作大全(xmlweb)

    6. **解析(Parsing)**:读取XML文档并转化为内存中的数据结构,分为DOM(Document Object Model)和SAX(Simple API for XML)两种方式。 7. **XPath(XML Path Language)**:用于查找XML文档中的节点,提供简洁...

    Java中关于XML的API

    JAXP版本的发展也反映了对新标准和技术的支持,例如JAXP 1.0支持XML 1.0、XML Namespace 1.0、SAX 1.0和DOM Level 1,而JAXP 1.1则增加了对SAX 2.0、DOM Level 2和XSLT 1.0的支持。 #### 三、JAXB (Java API for ...

    fluentxml4j:Java中用于XML解析,序列化,XPath查询和转换的fluent API

    FluentXML4J-Java中XML的流畅API XML解析,序列化XPath查询和转换,无需样板代码 产品特点 简单,流畅的API,但完全灵活 从java.io输入解析到org.w3c.dom.Document 将org.w3c.dom.Document序列化为任何java.io输出 ...

    XML 指南【chm电子版下载】

    6. **解析(Parsing)**:XML解析器读取XML文档并将其转化为可操作的数据结构,如DOM(Document Object Model)或SAX(Simple API for XML)。 在《XML指南》这个chm电子版中,可能涵盖了以下主题: 1. **基础语法*...

    2022年Java中关于XML的APIJava教程.docx

    JAXP提供了一组通用接口,用于在Java中解析XML文档,包括DOM、SAX和XSLT。它允许程序员在不修改代码的情况下更换具体的实现,如解析器或XSLT处理器。JAXP1.0支持XML1.0、XML Namespace1.0、SAX1.0和DOM Level 1,而...

    黑龙江大学XML课件

    5. **解析(Parsing)**:将XML文档转换为可处理的数据结构,有DOM(Document Object Model)和SAX(Simple API for XML)两种主要方式。 6. **实体(Entity)**:允许在XML文档中引用外部资源,如图片或文本文件。 ...

    XML入门

    此外,对于开发人员来说,了解XML相关的库和框架,如Java的JAXB或DOM4J,Python的lxml等,也是非常重要的。 XML入门的学习资源通常包括基础概念讲解、实例分析、XML编写规范以及实践项目。初学者可以通过阅读教程、...

    xml编程从入门到精通

    4. **SAX(Simple API for XML)解析**:与DOM不同,SAX是事件驱动的,适用于处理大型XML文档,以节省内存。 5. **XPath**:查询XML文档的路径语言,用于高效地定位XML节点。 6. **XSLT(Extensible Stylesheet ...

    xml教程

    5. **解析(Parsing)**:解析XML文件是将XML数据转换为程序可以操作的形式的过程。有两种主要的解析方式:DOM(Document Object Model)和SAX(Simple API for XML),前者将整个XML文档加载到内存中,后者采用事件...

    Java & XML

    - **API与抽象层**:分析了JAXP作为Java API for XML Parsing 的角色,以及它如何为不同的XML解析器提供统一的抽象层。 - **不同版本**:比较了JAXP 1.0 和 1.1 版本之间的差异,并强调了它们各自的优势和不足之处。...

    XML认证考试题库

    7. **解析(Parsing)**:将XML文档转换为可操作的数据结构,如DOM(Document Object Model)或SAX(Simple API for XML)。 8. **XPath(XML Path Language)**:用于查找XML文档中的特定元素、属性或文本,支持...

    xml教程及认证考试相关资料

    6. **解析(Parsing)**:XML解析器负责读取XML文档并将其转换为易于处理的形式,如DOM(Document Object Model)或SAX(Simple API for XML)事件驱动模型。 7. **XPath(XML Path Language)**:一种用于在XML文档...

    Java XML and JSON(Apress,2016)

    The first six chapters focus on XML along with the SAX, DOM, StAX, XPath, and XSLT APIs. The remaining four chapters focus on JSON along with the mJson, GSON, and JsonPath APIs. Each chapter in Java...

Global site tag (gtag.js) - Google Analytics