`

VTD-XML技术解析XML实例

阅读更多

VTD-XML是一种无提取的XML解析方法,它较好的解决了DOM占用内存过大的缺点,并且还提供了快速的解析与遍历、对XPath的支持和增量更新等特性。VTD-XML是一个开源项目,目前有Java、C两种平台支持。

由于VTD-XML选取特定节点的遍历,修改都有很好的简单实例,这里就不再举例了。

下面的实例是尝试遍历整个XML的节点,还不是很完善。

 

 遍历XML的所有节点

 

public static void travelAll(VTDNav vn) throws Exception {
        BookMark bm = new BookMark();
        vn.toElement(VTDNav.ROOT);
        // assume vn is already available
        AutoPilot ap = new AutoPilot(vn); // ap is going to move the cursor
        ap.selectElement("*"); // select every element (* matches all strings)
        while (ap.iterate()) // iterate will iterate thru all elements
        {
            // put processing logic here
            System.out.println("Element name ==> " + vn.toString(vn.getCurrentIndex()));
            int t = vn.getText();
            if (t != -1) System.out.println("Text content ==> " + vn.toNormalizedString(t));

            int attrIndex = vn.getAttrVal("partNum");
            if (attrIndex != -1) {
                System.out.println("attrValue----------" + vn.toString(attrIndex));
            }

            // make sure that the cursor position entering the loop is the same
            // as the position exiting the loop
            // One way to do is use teh combination of vn.push() and vn.pop()
            // The other is to manually move the cursor back into the original place
        }
        vn.toElement(VTDNav.ROOT); // reset the cursor to point to the root element
    }

 

 遍历XML所有节点的属性

 

public static void travelAllAttribute(VTDNav vn) throws Exception {
        String rootName = vn.toString(vn.getRootIndex());
        System.out.println(rootName);
        if (vn.toElement(VTDNav.ROOT)) {
            int r0 = vn.getCurrentIndex();
            if (r0 != -1) {
                System.out.println("rootName---------- " + vn.toString(r0));
            }

            AutoPilot ap = new AutoPilot(vn);
            ap.selectAttr("*");
            int attrCount = vn.getAttrCount();
            for (int i = 0; i < attrCount; i++) {
                int a = ap.iterateAttr();
                if (a != -1) {
                    System.out.println("attrName---------- " + vn.toString(a));
                }
            }

            while (vn.toElement(VTDNav.FIRST_CHILD)) {
                while (vn.toElement(VTDNav.NEXT_SIBLING)) {
                    int c = vn.getCurrentIndex();
                    if (c != -1) {
                        System.out.println("first child name----------- " + vn.toString(c));
                    }
                    int f = vn.getText();
                    if (f != -1) {
                        System.out.println("first child value---------- " + vn.toString(f));
                    }

                    ap.selectAttr("*");
                    attrCount = vn.getAttrCount();
                    for (int i = 0; i < attrCount; i++) {
                        int attrIndex = ap.iterateAttr();
                        if (attrIndex != -1) {
                            String attrName = vn.toString(attrIndex);
                            System.out.println("attrName---------- " + attrName);
                            int attrValueIndex = vn.getAttrVal(attrName);
                            if (attrValueIndex != -1) {
                                String attrValue = vn.toString(attrValueIndex);
                                System.out.println("attrValue---------- " + attrValue);
                            }
                        }
                    }
                }

            }

            if (vn.toElement(VTDNav.FIRST_CHILD)) {
                int c = vn.getCurrentIndex();
                if (c != -1) {
                    System.out.println("first child name-----------" + vn.toString(c));
                }
                int f = vn.getText();
                if (f != -1) {
                    System.out.println("first child ------" + vn.toString(f));
                }

                int d = vn.getCurrentDepth();
                System.out.println(d);

                if (vn.toElement(VTDNav.FIRST_CHILD)) {
                    int i = vn.getCurrentIndex();
                }
            }

            if (vn.toElement(VTDNav.NEXT_SIBLING)) {
                int c = vn.getCurrentIndex();
                if (c != -1) {
                    System.out.println("first child name-----------" + vn.toString(c));
                }
                int f = vn.getText();
                if (f != -1) {
                    System.out.println("first child ------" + vn.toString(f));
                }

                int d = vn.getCurrentDepth();
                System.out.println(d);

                if (vn.toElement(VTDNav.FIRST_CHILD)) {
                    c = vn.getCurrentIndex();
                    if (c != -1) {
                        System.out.println("first child name-----------" + vn.toString(c));
                    }
                    f = vn.getText();
                    if (f != -1) {
                        System.out.println("first child ------" + vn.toString(f));
                    }

                    d = vn.getCurrentDepth();
                    System.out.println(d);

                    ap.selectAttr("*");
                    attrCount = vn.getAttrCount();
                    for (int i = 0; i < attrCount; i++) {
                        int a = ap.iterateAttr();
                        if (a != -1) {
                            System.out.println("attrName---------- " + vn.toString(a));
                            int t = vn.getAttrVal(vn.toString(a));
                            System.out.println("attrValue---------- " + vn.toString(t));
                        }
                    }

                    if (vn.toElement(VTDNav.FIRST_CHILD)) {
                        int i = vn.getCurrentIndex();
                    }
                }
            }
        }
    }

 

 VTD-XML  API文档 VTD-XML_intro.zip在附件中

参考:

http://blog.csdn.net/jamesmf/article/details/7769730

http://www.javaworld.com/article/2071745/soa/simplify-xml-processing-with-vtd-xml.html

http://www.codeproject.com/Articles/28237/Programming-XPath-with-VTD-XML

 

分享到:
评论

相关推荐

    vtd-xml vtd-xml vtd-xml

    2. **解析过程**:VTD-XML的解析过程分为两个阶段:预处理和运行时处理。预处理阶段构建VTD索引,这是一个离线过程,可以大大提高后续操作的速度。运行时处理阶段,通过索引进行XML文档的随机访问和操作。 3. **XML...

    vtd-xml XML解析工具

    总的来说,VTD-XML是一种强大的XML解析解决方案,它通过独特的VTD技术为开发者提供了更高效、更节省资源的XML处理方式。无论是在大型企业系统还是在小型应用中,VTD-XML都能以其出色的性能和丰富的功能满足各种XML...

    vtd-xml+教程+源码+事例+集合.zip

    5. VTD-XML实例应用: - 数据提取:通过XPath查询,快速获取XML文档中的特定数据。 - 数据验证:利用AutoPilot验证XML文档是否符合预定义的结构。 - 数据转换:将XML文档转换为其他格式,如JSON或CSV。 - 数据...

    vtd-xml+教程+源码+事例+集合

    VTD-XML是一种高效、灵活且轻量级的XML解析库,由VTD Tech公司开发。这个库提供了对XML文档的随机访问和导航功能,特别适用于处理大型XML文档。VTD-XML的主要特点在于它的基于索引的解析方式,这使得在XML数据中的...

    VTD-XML.zip_VTD_VTD-XML_instruction_zip

    然而,XML的解析和操作通常需要高效的工具,这就是VTD-XML的作用。 VTD-XML的核心特点是使用了Variable Length Token Descriptor (VTD)来表示XML文档,这种表示方式能够显著降低内存占用并提高处理速度。VTD是一个...

    VTD-XML 不同于SAX和DOM的XML高效解析器

    VTD-XML是由XimpleWare公司开发的一种高效的XML解析技术。它与SAX和DOM相比,具有一些独特的优势: 1. **内存效率**:VTD-XML采用了一种称为VTD(Virtual Tokenized Document)的数据结构,可以显著减少内存消耗。...

    vtd-xml源码+例程

    总的来说,"vtd-xml源码+例程"为开发者提供了一个深入研究XML处理技术的机会,不仅能够提升对XML解析原理的理解,还能帮助开发者掌握一种实用且高效的XML处理工具。无论是进行XML解析、操作还是生成,VTD-XML都能...

    VTD-XML c源码及vs2013编译生成的lib

    VTD-XML库以其基于变量的文档定位(Variable To Document)技术而闻名,它提供了对XML文档的强大导航、解析和操作功能,且性能优于DOM和SAX解析器。 VTD-XML库的核心理念是通过预处理XML文档并创建一个索引,使得...

    vtd-xml相关资料.zip

    VTD-XML是一种高效、轻量级的XML解析技术,由XimpleWare公司开发,它在处理大型XML文档时表现出显著的优势,相比DOM和SAX解析方式,VTD-XML在速度和内存占用方面有着更优的表现。VTD(Virtual Token Descriptor)是...

    vtd-xml example

    VTD-XML是一个高效、灵活且功能强大的XML处理库,由VTD-XML技术创始人Harold Abelson开发。它主要用于XML文档的随机访问、解析、导航和修改。VTD-XML利用一种叫做Variable Length Tokenized Index(可变长度标记化...

    VTD-XML解析软件.zip

    VTD-XML是一款高效、低内存占用的XML解析软件,由XimpleWare公司开发,它在处理大型XML文档时表现出显著的优势。相比传统的DOM(Document Object Model)和SAX(Simple API for XML)解析器,VTD-XML提供了一种全新...

    VTD-XML-Example:使用 VTD-XML 解析器与 volley 并与 pull 解析器进行比较的示例

    1. 创建VTD-XML解析器实例。 2. 使用VTD-XML的`parse()`方法加载XML数据。 3. 使用`AutoPilot`或`Nav`接口导航XML结构,进行数据提取或操作。 4. 完成处理后,释放VTD-XML的资源。 对比传统的Pull解析器,如Android...

    新兴XML处理方法VTD-XML介绍

    ### 新兴XML处理方法VTD-XML介绍 #### 序言 随着XML(Extensible Markup Language,可扩展...随着XML技术在各行各业中的广泛应用,VTD-XML作为一种高效的XML处理工具,将会在未来的软件开发中发挥越来越重要的作用。

    vtd-xml-2.6-java-src.rar_VTD-XML_www.vtd2cn_断词

    VTD-XML 是一种基于 Java* 的新型开放源代码 XML 处理 API,能够解决当前 XML 处理...仅凭这一点,我们还不能认为 VTD-XML 是专门为此而设计的,因为从第一步——断词(tokenization)开始,它就引入了大量优化技术。

    基于多核处理器的VTD-XML节点查询执行性能优化.pdf

    《基于多核处理器的VTD-XML节点查询执行性能优化》这篇论文主要探讨了在当前主流的多核处理器环境下,如何通过优化VTD-XML(Virtual Token Descriptor XML)技术来提升XML文档节点查询的执行性能。VTD-XML是一种高效...

    vtd-xml解析实例

    网上vtd的使用资料比较少,可能是太简单了没人想写吧。自己写的Demo,对VTDNav、AutoPilot进一步进行封装,从而简化解析代码,仅供参考 上传后才发现上传的demo.xml错了,貌似无法重新上传,内容应该是 &lt;?xml ...

    VTD-XML: The Future of XML Processing-开源

    VTD-XML是一种高效、轻量级的XML处理库,由XimpleWare公司开发并开源。这个库在XML处理领域独具特色,它结合了DOM、SAX和PULL...通过开源的方式,VTD-XML促进了XML技术的进一步发展,并且为社区带来了更多的可能性。

    使用VTD-XML的无模式C#-XML数据绑定

    标题中的“使用VTD-XML的无模式C#-XML数据绑定”指的是在C#编程环境中,利用VTD-XML库实现的一种XML数据绑定技术,它允许开发者在没有XML架构(Schema)的情况下处理XML文档。VTD-XML库是一个高效且灵活的XML处理...

    VTD-XML:面向未来的XML处理(第一部分)

    例如,以下代码片段展示了如何使用VTD-XML在C#中解析并提取XML数据: ```csharp using System; using com.ximpleware; public class VTDTest { public static void Main(string[] args) { VTDGen vg = new ...

Global site tag (gtag.js) - Google Analytics