转载:【https://blog.csdn.net/JAVA_8206/article/details/52084846】
转载:【https://blog.csdn.net/phiill_01/article/details/8727292】
代码 + 理论


代码部分

VTD解析xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<body><id>0001</id><name>zhangsan</name><records><record><school>frist</school></record><record><school>second</school></record></records>
</body>

取出record下的school中的信息

public static void main(String[] args) {try {VTDGen gen = new VTDGen();// 解析student.xml对象,不含有命名空间gen.parseFile("e:\\student.xml", false);VTDNav nav = gen.getNav();AutoPilot ap = new AutoPilot();AutoPilot ape = new AutoPilot();// 将导航器绑定到ap对像上// 如果把VTDNav表达为车辆上导航仪器的话,那么Autoap就代表开车人,他能更智能化的找到XPATH表达的含义ap.bind(nav);ape.bind(nav);// 设置重新设置一个xpath表达式的字符串,但是通常是在之后调用ape.selectXPath("/body/records/record");List<String> records = new ArrayList<String>();String school= "" ;// evalXPath()返回nodeset集合中的下一个节点,如果检测到为匹配的节点,则返回为-1while(ape.evalXPath() != -1){ap.selectXPath("school");school= ap.evalXPathToString();records.add(school);}ape.resetXPath();for(String s : records){System.out.println("===" + s);}} catch (Exception ex) {ex.printStackTrace();}
}

理论部分

【原理】
1、将XML文件以字节流的方式读取到内存中。
2、判断文件的编码,用相应的编码来获取字符
3、对字符解析构建一个VTD格式的数据结构,来保存XML文件的一些信息
4、从VTD数据结构来获取相应的信息

1 以一个byte数组开始(存放xml);
2 利用VTDGen进行解析
3 利用VTDNav进行导航定位
4 节点遍历使用AutoPilot
5 利用XPath进行节点选择
注:
如果把VTDNav表达为车辆上导航仪器的话,那么Autoap就代表开车人,
他能更智能化的找到XPATH表达的含义

  1. VTDGen
    a、读取并且解析XML.如果XML格式错误将不能解析
    b、在解析的过程中建立相应的索引
    c、保存的是原始的二进制数据,没有转码
    使用:
    VTDGen vtdGen = new VTDGen();
    vtdGen.parseFile(file, boolean NS);
    VTDNav nav = vtdGen.getNav();
    注:大数据量的XML使用:VTDGenHuge

  2. 利用VTDGen进行当前游标位置的导航,方法有:
    a、 toElement:(作用是控制游标的移动)
    ROOT :将游标移动到根节点
    PARENT:将游标移动到当前节点的父节点
    FIRST_CHILD:将游标移动到当前节点的第一个子节点
    LAST_CHILD :将游标移动到当前节点的最后一个子节点
    NEXT_SIBLING:将游标移动到当前节点的下一个兄弟节点
    PREV_SIBLING:将游标移动当前节点的上一个兄弟节点
    b、toElementNS:带有命名空间
    C、getText() 返回一个index
    .toString(int index) 会将 >、<、&等转义符解析。
    .toRawString(int index) 顾名思义,是“未经任何处理的字符串”。
    .toNormalizedString(int index) 则会在解析特殊转义符的基础上,
    将文本中的空白字符(包括空格、换行符、制表符等等)用一个空格代替,以使结果看起来更加“正常”。
    主要是对当前游标的数据的一些具体处理。

  3. 节点遍历使用Autopilot; 绑定相应的XPATH
    使用:
    1、设置XPATH
    AutoPilot ap = new AutoPilot();
    ap.selectXPath(“/a/b/text()”);
    2、与VTDNav导航相绑定
    VTDNav vn = vg.getNav();
    ap.bind(vn);
    3、控制游标
    ap.evalXPath():游标移动到下一个xpath制定的位置
    如果要回到第一个xpath的位置:ap.resetXPath();
    4、XPATH 的相对遍历比绝对遍历的速度要快(可以使用XPATH 轴)
    5、VTDNav 的push和pop方法来保存游标的上一个位置

  4. 增量更新使用XMLModifier。
    增量修改可以不用再遍历整个文档二进行值修改,这样就提高了修改的效率。
    使用:
    XMLModifier xm = new XMLModifier();
    ap.bind(vn);绑定XPATH来指定修改位置
    xm.bind(vn);绑定TVDgen
    方法:
    insertAttribute(” attr1=’val’ attr2=’val2’”);
    remove()
    insertBeforeElement(),insertAfterElement()
    updateElementName()

  5. 命名空间:
    带有命名空间的xpath:
    AutoPilot ap = new AutoPilot();
    ap.declareXPathNameSpace(“ns1”,”someURL”);
    ap.selectXPath(“/ns1:a/ns1:b/text()”);

VTD解析XML( VTDGen、AutoPilot )相关推荐

  1. vtd解析xml文件-遍历

    VTD官方文档:https://vtd-xml.sourceforge.io/javadoc/ VTD官方例子:https://vtd-xml.sourceforge.io/codeSample/cs ...

  2. python 使用sax 解析xml 文件

    这里不是说xml 的所以如果xml 不了解,可以百度大致看下即可, SAX知识了解 SAX (simple API for XML )  有解析器和事件处理器 解析器负责读取XML文档,并向事件处理器 ...

  3. c语言解析xml字符串_Python XML解析

    Python XML解析 什么是XML? XML 指可扩展标记语言(eXtensible Markup Language). 你可以通过本站学习XML教程 XML 被设计用来传输和存储数据. XML是 ...

  4. python中利用lxml模块解析xml文件报错XMLSyntaxError: Opening and ending tag mismatch

    今天在代码中第一次使用lxml解析xml文件时出错了, XMLSyntaxError: Opening and ending tag mismatch: keyEffectiveDate line 2 ...

  5. XML 解析XML文档 XML约束

    XML 什么是XML Extensible Markup Language(可扩展的标记语言) 他是一个语言,有自己的语法,和Java以及其他的编程无关 "标记" 在文件中包含类似 ...

  6. VC解析XML--使用CMarkup类解析XML

    经过今天尝试MFC解析XML串,也算有了不少收获,总结一下.          我是使用的CMarkup类对XML进行操作.                    CMarkup好象都是先从一个xml ...

  7. JAVA动态读取xml_Java动态生成和解析xml文件步骤详解

    packageday12;importjava.io.FileInputStream;importjava.util.ArrayList;importjava.util.List;importorg. ...

  8. java xml中的冒号_Java jdom解析xml文件带冒号的属性

    Java jdom解析xml文件带冒号的属性 如果xml文件解析带了冒号的属性,一般都是要特别处理,这里是命名空间,N年前遇到过一次忘记记录,后来也忘了,这次再记录下. 解决了,记录下,分享给大家,百 ...

  9. java xml dom4j 解析_在JAVA中怎么用DOM和DOM4j解析XML啊?

    二.XML文件 三.开始解析 public class JDOMTest { public static void main(String[] args) { // 进行对books.xml文件的JD ...

最新文章

  1. C++知识:__stdcall、__cdcel和__fastcall三者的区别
  2. linux——管理系统设备之磁盘的加密、加密磁盘的挂载及磁盘阵列、配额
  3. java hprof_java 性能之 hprof
  4. 《数据库SQL实战》查找所有已经分配部门的员工的last_name和first_name
  5. C++笔记-lambda表达式需要注意的地方
  6. JQuery文件上传插件ajaxFileUpload在Asp.net MVC中的使用[转载]
  7. mysql b 树 锁_mysql索引B+树、MVCC、锁一文搞懂
  8. 亚马逊靠“新闻稿”推动创新,跃居市值第一
  9. kendo实现grid的inline编辑
  10. 【单片机仿真】(十一)指令系统逻辑运算指令 — 逻辑与指令ANL、逻辑或指令ORL
  11. Tensorflow加载SavedModel模型过程源码阅读
  12. 周集中团队Nature子刊中网络图布局的R语言可视化复现
  13. HMS Core线上Codelabs挑战赛第二期开始
  14. 【Java实例】王者荣耀阵容展示
  15. 微信扫码登录自定义二维码显示信息
  16. IPV4服务器如何支持ipv6访问
  17. 装X与务实并存!iPad越狱必装插件汇总
  18. Keras BP神经网络运用于波士顿房价预测
  19. 遇到问题:(已解决)Texpad无法编译--“未找到TeX发型版 没有在您的系统中找到TeX发行版。....或安装您的TeX发行版”
  20. 计算机的软件教学设计七年级,计算机软件系统教学设计.doc

热门文章

  1. java农夫过河问题_农夫过河问题——C语言程序设计(转)
  2. cydia java_Cydia Substrate 使用
  3. Mac下载vscode 缓慢?以下解决方法起飞下载
  4. 从菜鸟到大师——Python量化之路
  5. python动态爬取知乎_Python新手爬虫:爬取搜狗图片(动态)
  6. porta rch_Smeerch.it
  7. jzoj5989. 【北大2019冬令营模拟2019.1.6】Forest (set)
  8. python创建网盘_超简单!基于Python搭建个人“云盘”
  9. 竞价推广关键词怎么选择?
  10. win8\win server 2012添加【中文--美式键盘】