JAVA XML 那些事

Java解析 XML 及生成XML 1、文档对象模型(Document Object Model,DOM) (tree parser)将读入的XML文档转换为树结构。2、简单API(Simple API for XML SAX) (Stream parser)将读入的XML文档转换为相应的事件。startDocument和endDocument 分别在文档开始和结束时各调用一次。两种解析器比较:如果文档很长,生成树很耗内存,如果不关心上下文,只关心元素,可以使用流。//三种方式获取Document。4、所有属性必须有值,不能为空。 阅读详情
一、Crimson和Xerces恩仇录 
Crimson来自于Sun捐赠给Apache的ProjectX项目,Xerces来自IBM捐赠给Apache的XML4J项目,结果 Xerces胜出,成了Apache XML小组全力开发的XML API,而Crimon已经早就不做了,如今Xerces名满天下,到处都是在用 Xerces DOM和SAX解析器,只有Sun不服气,非要在JDK1.4里面使用过时的Crimson,让人感觉像是在赌气一样,真是让人可怜又可气!不过IBM发行JDK用的XML 解析器自然是Xerces。  
由于JDK的Class Loader的优先级关系,当你采用JAXP编写XML程序的时候,即使把Xerces包引入 CLASSPATH,JDK还是会顽固的使用Crimson,这一点通过打开JVM的verbose参数可以观察到。不过JDK也允许你采用其它的解析器,因此我们可以通过在JRE\lib\目录下建一个jaxp.properties的文件,来替换解析器,jaxp.properties内容如下:  
引用: 
javax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl  
javax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl 
这样就可以使用Xerces,当然你必须还是要把Xerces包放到CLASSPATH下。  
二、JAXP的姗姗来迟 
Sun在XML领域总是后知后觉,等到Sun重视XML的时候,XML的API早就满天 飞了,尤其是IBM具有非常大的领先优势。不过Sun是规范的制订者,于是参考W3C的标准制订了JAXP规范。JAXP不像Xerces和Crimon那样,它只是一个spec,本身是不做任何事情的,它的作用就是提出一个统一的接口,让其它的XML API都来遵循JAXP编程,那么用JAXP写出来的程序,底层的API可以任意切换。  
具体来说JAXP包括了几个工厂类,这就是JDK1.4里面的javax.xml.parsers 包,用来寻找符合DOM标准的 XML API实现类的位置;此外JAXP还包括一整套interface,这就是JDK1.4里面的org.w3c.dom那几个包。工厂类负责加载 DOM的实现类。那么加载的规则是什么呢?  
我是通过阅读JAXP的源代码知道的,工厂类首先会根据java命令行传入的参数进行寻找,然后在根据JRE\lib \jaxp.properties中定义的实现类寻找,最后什么都找不到的话,就用Crimson。注意Crimons是由 Bootstrap Class Loader来load的,如果你不通过上面两个方法来改变工厂的寻找顺序,那么铁定用Crimson了  
三、 DOM解析器和DOM API 
当你严格采用JAXP编程的时候,是遵循W3C的DOm标准的,那么在JAXP底层你实际上可以任意切换不同的DOM实现,例如Xerces,或者Crimon,再或者其它,切换方法就是配置jaxp.properties。因此JAXP就是一些标准接口而已。  
而Xerces和Crimon也不单单是一个DOM实现那么简单,他们本身实际上也包含SAX解析器和DOM解析器。所以一个JAXP程序下面有如下层次:  
引用: 
JAXP应用程序 -> JAXP接口 -> Xerces DOM实现 -> Xerces DOM/SAX 解析器 
只要你用JAXP编程,那么你就可以切换到Crimson上来  
引用: 
JAXP应用程序 -> JAXP接口 -> Crimson DOM实现 -> Crimson DOM/SAX 解析器 
另外你也可以这样来做:  
引用: 
JAXP应用程序 -> JAXP接口 -> Crimson DOM实现 -> Xerces DOM/SAX 解析器 
不过如果你的程序不安装JAXP来写,那么就没有办法切换不同的DOM实现了。  
四、不是标准的dom4j和jdom 
W3C的DOM标准API难用的让人想撞墙,于是有一帮人开发Java专用的XML API目的是为了便于使用,这就是jdom的由来,开发到一半的时候,另一部分人又分了出来,他们有自己的想法,于是他们就去开发dom4j,形成了今天这样两个API,至于他们之间的性能,功能之比较看看上面我推荐的文章就知道了,jdom全面惨败。  
jdom 相当于上面的 JAXP接口 + Xerces DOM实现部分,它本身没有解析器,它可以使用Xerces或者Crimson的解析器,就是这样:  
引用: 
jdom应用程序 -> jdom API -> Xerces/Crimson解析器 
dom4j 和jdom类似,不过他自己绑定了一个叫做Alfred2的解析器,功能不是很全,但是速度很快,当没有其它的解析器的时候,dom4j将使用Alfred2解析器,如下:  
引用: 
dom4j应用程序 -> dom4j API -> Xerces/Crimson解析器 
或者  
引用: 
dom4j应用程序 -> dom4j API -> Alfred2解析器 
你在SF上下载的dom4j.jar是不含 Alfred2解析器的,而dom4j-full.jar包含了 Alfred2解析器,在这种情况下,实际上你什么也不需要,光是一个dom4j-full.jar就全部都包括了。  
因此可以看出采用dom4j/jdom编写的应用程序,已经不具备可移植性了。  
五、小插曲 
Sun是JAXP标准的制订者,甚至很执著的在JDK1.4里面绑定Crimson DOM实现和解析器,然后可笑的是,Sun自己的JAXM RI竟然不是用JAXP写出来的,而是dom4j,制订标准让大家遵守,自己却监守自盗,这未免太说不过去了吧!  
BTW: Hibernate也用的是dom4j来读取XML配置文件,如今已经越来越多的程序纷纷采用dom4j,如果你不是那么在乎可移植性,我强烈建议你采用dom4j。
Matlab:比较 XML 文件 阅读详情

相关推荐

Java中处理XML的问题及解决方法

通过使用Java的XML解析器和XML库,我们可以轻松地读取、创建、写入和修改XML文件中的数据。根据具体的需求,选择合适的XML解析和操作方法,可以高效地处理XML数据。解决方法:使用Java的XML解析器,如DOM(文档对象模型)或SAX(简单API for XML)来读取XML文件。解决方法:使用Java的XML库,如DOM或JDOM,可以创建一个新的XML文件并将数据写入其中。解决方法:使用Java的XML库,我们可以加载XML文件,定位到要修改的节点,并更新其值。问题:如何读取XML文件?

HackLogic的博客 214

【正版软件】Altova DiffDog 一款专业的 XML 感知的比较 / 合并工具,可让您比较和合并文本或源代码文件、XML 或 JSON 文件以及 Word 文档。

Altova DiffDog是独特的XML感知差异/合并工具,可让您比较和合并文本或源代码文件,XML或JSON文件以及Word文档。比较和同步目录、数据库架构和内容等。

2129

XML文档比较工具

《XML文档比较工具》(A7Soft ExamXML PRO)v5.15[压缩包]

XML文件对比

需要实现对比两个XML文件中的内容是否一致,并打印出不同的部分功能 一 方法 实现比对两个XML文件,使用 xmlUnit 库,可以比对 xml 的工具。 二 步骤 创建 maven 项目 导入 xmlUnit 库到 pom.xml 文件中 <dependency> <groupId>xmlunit</groupId> <artifactId>xmlunit</artifactId> <version>1.6</ve

weixin_46195803的博客 5688

XML比较工具ExamXML Pro注册版.rar

软件介绍: ExamXML Pro是一款专门用于XML/CSV文档的比较工具,可视化的操作方式使用起来更简单,能够以树形结构来显示XML文档,能够从任何数据源中读取并进行比较,另外还可以合并XML文档,比较SQL SERVER数据以及网页等。压缩包内附注册机,输入任意邮箱地址后可以生成相应的序列号。

【笔记软件obsidian】从入门到精通

目录 一、前言 二、下载及安装 三、【选修】ios用户如何通过iCloud进行三平台同步 四、基本Markdown语法 五、【选修】插件的下载及安装方式 六、

patrick的博客 9万+

Xml那些事

xml文件读取 什么是xml文件? xml文件的表示是一种以".xml"为扩展名的文件。 其存储结构为树形结构: 节点名称区分大小写 xml文件开头要加上版本信息和编码方式< ?xml version=“1.0” encoding=“UTF-8”? > 应用Dom方式解析Xml文件 首先我们要明确,解析xml文件的目的是获取xml文件中的节点名、节点值、属性名及属性值 xml中节...

追梦的小狼狗 338

头歌平台-人工智能导论实验(人脸识别)

答案仅供参考,自己动手丰衣足食!!!

qq_52119136的博客 3026

java xml解析器_Java XML解析器

java xml解析器Java XML parser is used to work with xml data. XML is widely used technology to transport or store data. That’s why there are many java xml parsers available. Java XML解析器用于处理xml数据。 XML是广泛用于...

从零开始的教程世界 1110

ServiceNow Discovery & CMDB Interview Questions and Answers (2025)

【代码】ServiceNow Discovery & CMDB Interview Questions and Answers (2025)

weixin_47584092的博客 910

Seurat-SCTransform与harmony整合学习

源于R tips:Seurat之SCTransform方法原理 (qq.com)Seurat对象在经过SCTransform处理后会增加一个SCT的Assay,里面的scaled.data就是经过scale之后的pearson residual值,这个值是用于后续降维聚类分析使用的。

hx2024的博客 2330

读取xml java,Java读取xml数据

xml中的代码书名1100书名2300java中的代码import java.io.File;import java.io.IOException;import javax.lang.model.element.Element;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFacto...

weixin_28865923的博客 1168

Aip1640、TM1640驱动程序

本文介绍了AIP1640/TM1640驱动芯片的编程实现,主要包括硬件接口定义和通信协议函数。通过宏定义配置时钟(CLK)和数据线(DIO)的GPIO控制,实现了I2C协议的启动、停止、字节发送等基本操作。核心函数AIP1640_Disp_Drive()完成显示驱动流程:先发送0x40命令设置地址自增模式,再发送0xC0起始地址和16字节显示数据,最后设置亮度参数。文中还包含5微秒延时函数、显示数据缓冲区定义,以及LED和数码管(SMG)的位映射注释说明。该代码适用于控制LED数码管显示,支持亮度调节功能。

zqx的博客 1401

Java解析XML

无

qq_64388611的博客 1346

Qt Android MySql 数据库驱动编译(详细图解步骤)

第一步.先介绍下环境搭建: Qt 版本 5.12.11 下载链接 https://download.qt.io/archive/qt/5.12/5.12.11/qt-opensource-linux-x64-5.12.11.run Ubuntu 18.04.6 LTS 下载链接 JDK版本 1.8.0_191 下载链接https://www.oracle.com/java/technologies/downloads/ Android Studio版本 ...

h a 6 6 6 c k 为 你解决复杂难题! 3381

Open3D 进阶(32)渐进三角网(PTD)地面滤波

渐进三角网地面滤波算法(Progressive TIN Densification, PTD)是一种广泛应用于机载LiDAR点云数据处理的滤波方法,旨在从复杂场景中精确分离地面点,以生成数字高程模型(DEM)。

点云侠的博客 1538

java xml路径_java读取xml路径

*内容如下: java 使用相对路径读取 xml 文件: 一、xml 文件一般的存放位置有三个: 1.放在 WEB-INF 下; 2.xml 文件放在/WEB-INF/classes 目录下或 class......JAVA读取xml文件中节点值_计算机软件及应用_IT/计算机_专业资料。pub...使用Java读写XML文档_计算机软件及应用_IT/计算机_专业资料。Java ....getCo...

weixin_35981295的博客 1430

【NVIDIA-GB200-1】国内第一份生产环境实战安装配置教程,配置安装脚本,nvidia gb200配置教程-复制即用;gb200驱动安装

GB200 的高性能通信依赖。

jundao1997的专栏 705

java xml 代码_Java代码到XML模式

在你开始前 关于本教程 JiBX是用于将XML数据绑定到Java对象的工具。 长期以来,JiBX数据绑定是将Java代码绑定到XML的最快,最灵活的方法。 但是,其绑定定义的复杂性以及对日益广泛使用的XML模式定义的有限支持有时使用户感到沮丧。 幸运的是,JiBX的1.2版本对于消除这些问题大有帮助。 在本教程中,您将学习如何使用JiBX 1.2的新功能从现有Java代码轻松生成XML...

cusi77914的博客 354

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Java操作XML

Java操作XML

快乐江小鱼的博客 1109

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

java实现xml的xsd验证_Java通过XML Schema校验XML

首页>编程语言> 文章详细Java通过XML Schema校验XML2020-03-28 10:51:10阅读:77来源:互联网Java通过XML Schema校验XMLXML的校验在XML处理中非常常见,如果没有有效的办法来校验XML的合法性,往往会导致很多问题。XML的校验是通过XML Schema(XSD) 或DTD文件的语法规范来校验的。DTD现在越来越不受欢迎了,在此选用...

weixin_34182361的博客 1009

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

java校验xml_Java通过XML Schema校验XML

Java通过XML Schema校验XMLJava通过XML Schema校验XMLXML的校验在XML处理中非常常见,如果没有有效的办法来校验XML的合法性,往往会导致很多问题。XML的校验是通过XML Schema(XSD) 或DTD文件的语法规范来校验的。DTD现在越来越不受欢迎了,在此选用XSD来校验。Java校验XML是件和扯淡的事情,因为Sun的XML相关软件包会令你云里雾里。W3C这...

weixin_39643679的博客 364

java拼接xml报文框架_java怎么组装xml报文

2016/10/22 XML解析 public class MyXMLReader extends DefaultHandler { java.util.Stack tags = new java.util.Stack(); public MyXMLReader() { super();......我们能够用下面的图示来描述 Java XML 绑定技术: Person XML、Java和工作流技术...

weixin_39634576的博客 675

java与xml_Java与XML映射利器

原标题: Java与XML映射利器熟悉Hibernate的朋友都知道,它可以把Java类和数据库表进行映射,通过操作Java对象的方式可以对表记录进行更新。这可以大大增加我们的开发效率,免去自己直接通过JDBC操作数据库表的繁琐过程。其实Mybatis也是类似的,只不过它是半自动的,需要自己写SQL。在利用Java开发基于XML的操作时你会不会也想要一款可以直接基于Java类建立对应的XML的映射...

weixin_36035900的博客 290

java xml 代码_XML模式到Java代码

在你开始前 关于本教程 JiBX是用于将XML数据绑定到Java™对象的工具。 长期以来,JiBX数据绑定是将Java代码绑定到XML的最快,最灵活的方法。 但是,其绑定定义的复杂性以及对日益广泛使用的XML模式定义的有限支持有时使用户感到沮丧。 幸运的是,JiBX的1.2版本对于消除这些问题大有帮助。 在本教程中,您将学习如何使用JiBX 1.2的新功能轻松地从XML模式定义生成Ja...

cuyi7076的博客 187
上一篇: java开发webservice的几种方式
下一篇: 更改jdk的默认xml解析器
大树叶
博客等级 码龄12年 1171粉丝 664原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值