VTD-XML解析XML入门简介

VTD-XML学习(4)——步骤&类 xml步骤 通常需要执行以下步骤来处理XML文档或消息。 从字节缓冲区开始:如果文档位于磁盘上,则需要先将文件加载到内存中;对于传入的SOAP消息,需要分配一个字节数组来保存内容。从1.6版开始,可以直接使用“ VTDGen :: parseFile()”来解析XML文件。 使用VTDGen进行解析:在这一步中,创建一个VTDGen类的实例,然后使用“ setDoc”成员方法将字节数组分配... 阅读详情

 

一、概述

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

 

二、原理

       为了实现non-extractive(非提取)这个目的,它将原XML文件原封不动的以二进制的方式读进内存,连解码都不做,然后在这个二进制byte数组上解析每个 element的位置并把一些信息记录下来,这种记录就被成为VTD(Virtual Token Descriptor,虚拟令牌描述符)。

之后的遍历操作便在这些保存下来的记录上进行,如果需要提取XML内容就利用记录中的位置等 信息在原始byte数组上进行解码并返回字符串。

VTD(Virtual Token Descriptor,虚拟令牌描述符)结构:

VTD是一个64bits定长的数值类型,记录了每个元素的起始位置(offset),长度(length),深度(depth)以及令牌(元素标签)的类型(type)等信息。

如下图,表示了每个元素的位置及类型信息,对Xml的所有操作都是基于这个数据结构:

它是二进制格式规范,而不是API规范

VTD记录是原始数据类型(32位的整数倍),它编码XML文件中令牌的以下参数:

  • 开始偏移
  • 长度
  • 嵌套深度
  • 令牌类型

VTD要求XML文档在内存中保持不变。

我们当前的VTD记录布局进一步指定了以下内容:

  • 使用64位作为基元类型(b63~b0)
  • 大端
  • 起始偏移:30位(b29~b0)最大值为2 ^ 30 -1 = 1G -1
  • 长度:20位(b51~b32)最大值为2 ^ 20-1 = 1M -1
  1. 对于某些令牌类型
  2. 前缀长度:9位(b51~b43)最大值511
  3. Q名长度:11位(b42~b 32)最大值1023

深度:8位(b59~b52)最大值为2 ^ 8-1 = 255

令牌类型:4位(b63~b60)

保留位:2位(b31:b30)

单位 - 因为处理模型在内部存储未解码的XML,所以偏移和长度的单位是编码格式的原始字符。对于UTF-8和ISO-8859,长度和偏移量以字节为单位。对于UTF-16,它们是16位字。

 

三、VTD的优点和缺点

由于VTD记录的长度不变,因此基于VTD的XML处理可能具有以下优点:

节省内存:

  • 由于VTD记录不是对象,因此不受每个对象内存开销的影响。
  • VTD存储可以批量分配(即使用大内存块):当分配一个大内存块来存储1024个VTD令牌时,只会产生一次每阵列内存开销,从而大大减少了每个记录的开销。几乎没有。

高性能:

  • 使用VTD,我们尝试在解析中实现高性能,这是VTD内存节省功能的副产品:更少的内存使用意味着分配的内存量更少。
  • 大型内存块的分配和GC比许多离散对象更快。请记住,我们处于这项技术的早期阶段。因此,应该期望在性能和可用性方面进一步改进。

固有持久性:

  • VTD记录可以保存在磁盘上或沿XML传输,以提高XML处理吞吐量。

增量更新:

  • 此功能在最近的文章中有详细解释

同时,需要了解VTD的一些局限性:

各种字段的上限:

  • (1)对于起始标记(最大Qname长度为2048;前缀512),溢出条件导致解析异常。对于其他令牌(上限为1M),可能会将长令牌分成多个较短的令牌。
  • (2)深度字段溢出条件会导致解析异常。
  • (3)起始偏移:目前支持的最大文档是1G字符(1G字节或2G字节,具体取决于实际的文档编码)。

位级布局的限制:

  • 可能需要重新排列位级布局以满足实际处理要求。

VTD令牌长度限制:

  • 当前VTD记录的长度为64位。如果64位不够,可以添加另一个32位。 

 

四、VTD-XML与DOM和SAX对比

与DOM相比,VTD-XML显着更快(高达10倍),内存效率更高(高达5倍)。

与SAX / PULL相比,VTD-XML不仅速度更快,而且能够随机访问,因此更易于使用。

 

五、FAQ

VTD-XML是索引器还是解析器?

VTD-XML同时是解析器和索引器,因为VTD-XML的API直接使用VTD索引来实现解析的目的。

 

为什么我应该将VTD-XML用于大型XML文件?

由于众多原因总结如下:

性能:VTD-XML的性能远远优于SAX

易于使用:随机访问与XPath结合使应用程序易于编写

更好的可维护性:应用程序代码更短,更易于理解。

增量更新:偶尔的小变化变得非常有效。

索引:预解析形式的XML将进一步提高处理性能。

内存映射:扩展的VTD-XML可以选择内存映射XML文档,从而可以处理大小大于可用物理内存的XML文件。

其他功能:只能使用VTD-XML剪切,粘贴,拆分和组合XML文档。

为了利用VTD-XML,我们建议开发人员将超大型XML文档拆分为更小,更易于管理的卡盘(<2GB)。

自VTD-XML 2.4以来,XimpleWare引入了一个扩展版本的VTD-XML,能够处理大小达256 GB的XML文档。

 

VTD-XML如何实现随机访问?

通过使用位置缓存(LC),它们本质上是分层元素目录。

位置缓存按每个级别分配; 即,相同的LC索引相同嵌套深度的所有元素。 LC条目是64位整数,其高32位是元素(开始标记)的VTD记录的索引值,并且其低32位指向对应于第一子元素的LC条目。

动机是坚持VTD的获胜策略:恒定令牌长度和固有持久性。

结果:LC成本约为总VTD-XML处理成本的* 10%*。

 

如果我获得属性名称的VTD索引值,我该如何检索属性值?

如果属性名称的索引值是i,则属性值对应于i + 1。

 

自动驾驶仿真:VTD的SCP命令详解 VTD的SCP(Simulation Control Protocol )用于进行非周期性的,即事件性的信息交互。通过发送SCP命令给到TaskControl,TaskControl根据命令的内容分发到进程,从而实现对VTD的操作,因此SCP是VTD自动化的基础。1、VTD软件主页面最下方有SCP的发送和接收的命令栏,命令栏会显示所有发送和接收到的SCP命令。 1、我们可以在Scenario界面添加车辆,通过双击车辆进入properties界面,然后在Actions界面中的SCP中添加SCP命令;1)创建端 阅读详情

相关推荐

VTD-XML技术深度解析与XML高效处理实战

你有没有遇到过这样的场景?一个 800MB 的交易日志 XML 文件刚被加载,JVM 就开始疯狂 GC,CPU 占用飙到 95%,整个服务卡死——而你只是想从中提取出几百条关键记录。😭 这种“杀鸡用牛刀”的尴尬,在传统 DOM 解析器面前屡见不鲜。但别急着放弃!今天我们要聊的不是那种动辄吃掉几 GB 内存的老古董,而是一个真正为性能而生的技术——。它就像是一把外科手术刀,精准、高效、几乎不留痕迹地切开 XML 文档的每一层结构,却从不复制哪怕一个字节的数据。是不是听起来有点玄乎?

weixin_42405592的博客 1037

VTD-XML学习(1)——简介

XML解析简介 VTD-XML是一种无提取的XML解析方法,它较好的解决了DOM占用内存过大的缺点,并且还提供了快速的解析与遍历、对XPath的支持和增量更新等特性。 在进一步了解VTD-XML前可以先来看一下XML和XML的解析。 XML XML 指可扩展标记语言(EXtensible Markup Language),在格式上与HTML类似,于html不同的是,xml并不是为了显示数据而是...

小隐的博客 827

深入学习VTD-XML:源码剖析与应用例程

VTD-XML(Virtual Token Descriptor XML)是一种开源的XML解析技术,它通过使用指针代替传统的节点树结构来实现XML文档的快速解析。这种技术主要面向处理大型XML文件,能有效地提升解析速度和内存使用效率。VTD-XML(Virtual Token Descriptor XML)是一种不同于传统DOM或SAX的XML解析技术。

weixin_42588877的博客 954

XML解析技术之VTD-XML 简介及代码实例

第一部分:XML解析技术简介        XML(eXtensible Markup Language,可扩展标记语言)是由World Wide Web联盟(W3C)定义的元语言,即一种关于语言的语言。 Xml的优势或者说力量源于它的数据独立性,广泛应用在分布式计算领域。 XML解析技术的分类 根据从XML中获取数据的简易性,性能和最终所得到的数据模型的不同,XML解析技术大致可分为以下...

yunnick的专栏 944

vtd-xml vtd-xml vtd-xml

vtd-xml vtd-xml vtd-xml vtd-xml

VTD 使用手册

VTD是一款高保真的自动驾驶汽车场景仿真软件,这个是其使用文档。非常实用

java vtd-xml_XML解析技术之VTD-XML 简介及代码实例

XML(eXtensible Markup Language,可扩展标记语言)是由World Wide Web联盟(W3C)定义的元语言,即一种关于语言的语言。 Xml的优势或者说力量源于它的数据独立性,广泛应用在分布式计算领域。XML解析技术的分类根据从XML中获取数据的简易性,性能和最终所得到的数据模型的不同,XML解析技术大致可分为以下四类:1.面向文档的流式解析;2.面向文档的对象式解析;...

weixin_34922053的博客 644

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

介绍VTD-XML,XML处理的未来

vtd xml example

Summary Many readers of The Code Project are familiar with various types of XML parsers in the .NET environment. This article series introduces a new XML processing model called VTD-XML to The Code P

gdp5211314的专栏 1150

Win64 驱动内核编程-16.WFP网络监控驱动(防火墙)

WFP驱动监控网络 WFP是微软推出来替代TDIHOOK、NDISHOOK等拦截网络通信的方案,WFP的框架非常庞大,在RING3和RING0各有一套类似的函数,令人兴奋的是,即使在R3使用WFP,也可以做到全局拦截访问网络。由于WFP的范围太广,实在难以一言概括,感...

墨鱼菜鸡 1033

紫光同创PGL50H开发板实战:盘古50KN网口板的高速通信与数据处理

本文详细介绍了紫光同创PGL50H开发板(盘古50KN网口板)在高速通信与数据处理领域的实战应用。文章从开箱、核心芯片解析、开发环境搭建入手,重点讲解了如何配置与测试其8路千兆以太网接口和SFP光纤接口,并深入探讨了FPGA与DDR3协同进行多路数据汇聚处理的系统架构与调试方法,为网络通信与高速数据处理系统开发提供了宝贵的实践经验。

weixin_28256233的博客 455

VTD-XML解析

采用VTD-XML开源工具解析XML(一)    1.VTDGen是执行解析功能的类的名字    2.解析后,你可以得到VTDGen的一个实例,用它可以遍历整颗树.    3.AutoPilot是是XPath和节点遍历的包装类     基于指针的模型:仅有一个指针是可能的.解析后,指针位于根节点.你可以用一个全局堆栈来记下这个指针的位置.     无状态XPath估算:除非节点是空的,否

zuo_qin_bo的专栏 1092

OSGEarth三维可视化避坑指南:如何高效加载SHP/TIF地理数据?

本文详细介绍了OSGEarth在三维地球可视化中高效加载SHP/TIF地理数据的实战策略,包括空间参考系配置、性能优化、二三维联动等关键技巧。通过具体案例和代码示例,帮助开发者解决坐标偏移、性能卡顿等常见问题,提升三维GIS开发效率。

weixin_29216957的博客 224

VTD-XML技术解析XML实例

VTD-XML是一种无提取的XML解析方法,它较好的解决了DOM占用内存过大的缺点,并且还提供了快速的解析与遍历、对XPath的支持和增量更新等特性。VTD-XML是一个开源项目,目前有Java、C两种平台支持。 由于VTD-XML选取特定节点的遍历,修改都有很好的简单实例,这里就不再举例了。 下面的实例是尝试遍历整个XML的节点,还不是很完善。    遍历XML的所有节点   p...

Coding First,Thinking Second 489

双轮差动机器人SLAM实战:轮速里程计从建模到精度验证(附Matlab代码)

本文详细介绍了双轮差动机器人SLAM系统中轮速里程计的实现全流程,包括核心原理、建模方法、Matlab代码实现及精度验证。通过轮速仪数据建模和连续积分算法,提升定位精度,并附有完整的误差分析和工程优化技巧,为开发者提供实用参考。

weixin_29050271的博客 224

抖音无水印视频爬虫实战:从抓包分析到批量下载指定用户作品

抖音作为当前最受欢迎的短视频平台,拥有海量的优质内容。很多用户希望备份自己或他人的作品,但抖音官方并未提供批量下载功能,且直接下载的视频带有平台水印。本文将带领大家从零开始,通过抓包分析、设备模拟、请求签名等核心技术,实现一个完整的抖音无水印视频爬虫系统。本文仅供技术学习和个人备份使用,请勿将爬取的内容用于商业用途或侵犯他人版权,爬取频率请控制合理范围内。目录一、前言二、技术栈概览三、准备工作3.1 环境搭建3.2 抓包分析步骤3.3 关键API发现四、核心技术解密4.1 X-Gorgon签名算法。

2201_76125261的博客 847

使用VTD-XML简化XML处理-克服DOM及SAX缺点的新选择

作者:Jimmy Zhang;rainy14f(作者的blog:http://shaofan.blogjava.net/)概要做为下一代WEB应用的推动性技术,XML相当简单,易学易用。然而,当前的XML处理技术却非如此。Document Object Model和Simple API for XML都比较慢,低效,且不易于使用。VTD-XML,作为下一代的XML处理模型,提供超越DOM和SA

baggio785的专栏 8202

#systemverilog# 之 event region 和 timeslot 仿真调度(二)例子

由于疫情的关系,一时半会回不了学校了。今天开始,哪怕在家也要克服惰性开始学习了。今天来个的想了很久但都犯懒而没动手的内容,就是关于仿真软件在跑systemverilog的时候,是如果通过将HDL代码分成5个区域来编译,从而实现用软件模拟硬件的运行结果的思想。 首先,是基础概念,systemverilog标准划分了仿真软件的5个跑仿真所要执行的区域,说白了就是规定了软件在跑代码的时候要把代码分成5类,放到5个堆栈里面分别跑,这样才能:明明在软件上是以顺序方式来执行代码的,却能“看似”像在硬件中那样的实现并行

那么菜的博客 1765

VTD-XML学习(2)——模型刨析

VTD-XML解析简介 VTD-XML是一个新型的非提取式XML解析模型。VTD-XML使用64位整数表示XML节点信息。VTD Record和LC Entry共同构成了VTD-XML的主要结构。 什么是提取? 提取就是指从XML文档中抽取一部分放进内存进行解析,并构建节点对象以保存原始信息 VTD Record VTD record用来表示XML节点信息,包括节点类型、节点深度、节点长度、偏...

小隐的博客 687

YOLO11 改进、魔改|分组残差自注意力GRSA,通过分组残差优化 QKV 计算、指数空间映射优化位置偏差,在大幅降低自注意力模块参数和计算量的同时,增强特征关系与位置信息的表征能力

【摘要】研究人员提出GRSA(分组残差自注意力)机制,解决Transformer在图像超分辨率任务中效率与性能难以兼顾的问题。GRSA通过分组残差层减少自注意力参数冗余,同时采用指数空间相对位置偏差优化位置信息表征。实验表明,GRSA在降低50%参数量的同时保持模型性能,适用于目标检测和图像分割任务。在YOLO系列模型中集成GRSA可提升小目标检测精度,代码实现已开源,详细部署教程见相关视频与GitHub资源。该机制为轻量化Transformer模型提供了高效解决方案。

qq_64693987的博客 798

华为OD机试 - 名字的漂亮度(Java 牛客练习题)

本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。每个字母都有一个“漂亮度”,范围在1到26之间。没有任何两个不同字母拥有相同的“漂亮度”。给出一个字符串,该字符串仅由小写字母组成,定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。给出多个字符串,计算每个字符串最大可能的“漂亮度”。第一行一个整数N,接下来N行每行一个字符串。数据范围:输入的名字长度满足。每个字符串可能的最大漂亮程度。

学Java,找哪吒 1786

vtd xml java_新兴XML处理方法VTD-XML介绍

序言本文所提及的VTD-XML并非本文作者原创,作者只是对它进行介绍。问题通常当我们提起XML的使用时,最头痛的部分便是XML的verbosity与XML的解析速度,当需要处理大XML文件时这个问题便变得格外严重。我在这里提及的,便是如何优化XML处理速度的话题。当我们选择处理XML文件的时候,我们大致上有两种选择:DOM,这是W3C的标准模型,它将XML的结构信息以树形的方式构建,提供了遍历这颗...

weixin_36382265的博客 456

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

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

 序言 本文所提及的VTD-XML并非本文作者原创,作者只是对它进行介绍。 问题 通常当我们提起XML的使用时,最头痛的部分便是XML的verbosity与XML的解析速度,当需要处理大XML文件时这个问题便变得格外严重。我在这里提及的,便是如何优化XML处理速度的话题。 当我们选择处理XML文件的时候,我们大致上有两种选择: DOM,这是W3C的标准模型,它将XML的结构

yiihsia的学习阵地 915

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

VTD-XML Tutorial (0)

Classes/Interfaces and Methods (类、接口,方法) Important Classes/Interfaces (关键类、接口) Essential Classes (基本类) VTD Generator: VTDGen is the class that encapsulates the main parsing, index loading and

NicholasKong 1187

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

上一篇: 【FAQ】Linux-CentOS7 常见问题及解决
下一篇: 深入理解Java虚拟机视频教程(jvm性能调优+内存模型+虚拟机原理)视频教程
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值