00:00
好了,咱们。继续啊。上节课呢,主要是说了一下SME的它的基础语法。大概的几个概念,简单说了一下,这个CDD呢是我们文档的类型定义。约束我们SR文件中只能出现哪些标签,标签里面只能出现哪些属性,属性的类型是什么?这个ddd呢,有新语法啊,就是STEM这种语法。这也是个STEM。啊,咱们不是说STEM以那个叫什么XXSD结尾吧,那它也可以这个以这个为结尾啊,都可以。然后呢,咱们还说一下这个啊,这个叉SM是用来修饰这个的,这是来约束的吧,这也是来约束的啊。嗯,咱们S面呢,它是一个可扩展的标签语言,主要的它的作用是为了完成什么,完成我们数据的存储和数据的描述,相当于小型数据库,另外的话,它可以完成语言之间的数据的交换啊,什么意思呢?咱们不是把这个打开吗?来看一下在这,嗯。
01:13
嗯。都看看啊。嗯,这个。基于SM的数据交换,嗯,在我们有一些大型项目中,可能会完成系统和系统之间的啊,或者软件和软件之间的数据交换嘛。Delph是吧?和Java之间交换怎么交换?通过S可以交换。可以的啊,没有问题,通用呢,S2它不是Java语言的,它是一个很优良的一个配置文件,有很多软件中的都使用它做配置文件。啊,专门做数据存储和数据描述,语法严格区分大小写,只能有一个根元素,那作为我们Java同学呢,其实最重点掌握呢,怎么去解析这个SMR文件行吧,怎么去读怎么去写啊。
02:01
这边呢,我就关掉它了啊呃,这边呢,我再说一个东西来关于SM文件的解析。关于SM文件的解析啊,大家记住啊,无论是哪一种编程语言,对SM文件解析的支持,都有两种情况啊,无论是哪一种编程语言啊,哪一种编程语言啊,对SM文件的解析啊,都包括啊两种方式。第一种方式是什么呀?是do解析,第二种方式是sax解析啊,有的人喜欢把它叫代解析,反正这个呢。嗯,都一样啊,都一样。关于SMR文件的解析啊,这个我看看不行,写到这个里边得了啊,点右键啊,我新建的Java项目,然后这个Java项目呢,我写上嗯,S那得了行吧,我也不用再起什么其他的一些复杂名字了啊在这来说一下,点右键吧,嗯,我在这呢,直接新建一个文件啊,叫read me文件得了啊read me.TST,那这样的话我就不在这写了啊,这个我就直接给它剪了,剪了啊写完之后这个文件关了吗?啊,放到这得了。
03:26
行吧,啊好。SM关于SMR文件的解析呢?无论是哪一种编程语言,对S文件的解析都包括两种方式,DOM解析和sax解析。好是这样,那么接下来继续啊。嗯,我们来说一下DOM解析,嗯,还是原理,我们再说一下sax解析啊,首先呢,我们说一下原理啊,然后我们再说一下优点啊,然后我们再说一下缺点啊,然后我们再说一下什么时候用啊,什么情况下选择杠解析方式,这个很重要啊,上节课呢,咱们可能从理论上讲的那个东西呢,你知道也行,不知道其实也无所谓啊,影响不是很大,但是呢,你在面试的时候,他可能会问你一个东西,什么东西,就是你能说一下吗?SL文件解析这个东西你肯定做项目,你肯定解析过SMR文件,这个SM文件解析的时候都包括哪两种方式,Do和s sax对吧?那么解析的时候,哎,你怎么选的是吧?告诉你是怎么个情况啊,Sax sex是怎么情况,那优点是什么,缺点是什么情什么情况下选用啊,这都很重要的啊,所以这边呢。
04:43
咱们再说上去这个吧,来这是什么情况下选用什么小SAXX解析,另外呢,我们介绍完这个之后,我们还要介绍啊在作为什么,我们上面说Java了吗?没有啊,作为Java程序员。
05:00
啊,如何解析SL文件。啊,或者说解析SR文件的。这个开源项目啊,都包括哪些。嗯,这个得介绍一下来,我们先挨着边看啊,首先第一个这个原理是什么。高解析的原理是。在解析SR文件在开始啊,在开始解析SR文件的时候。将整个什么SL文件全部干什么,加载到什么内存中是吧,在内存中生成啊,或者在内存中。编程语言将SMR文件啊映射啊映射成一个啊映射成一个。或者映成了一棵树吧,啊,一棵树。
06:02
这样说,在开始解析S文件的时候,比如说现在呢,我在这有个S文件叫什么呀?叫web.S文件。而这个S文件有60多兆。啊,挺大吧,然后呢,它这个DOM解析的原理实际上是在开始向在开始程序执行的时候,将整个这个文档全部加载到内存中。然后在内层中形成一棵大树啊,形成一棵大树啊,这棵树啊就是一个。加va对象吧,啊,加号对象啊,就这个加,就又说加va了,就是这个对象啊这样。这棵树就是这个对象。然后。我们可以啊,对啊,这棵树上的什么任意节点啊,进行什么增删改查操作。
07:04
开始解析的时候,它会将那个文件全部加载到内存中,在内存中呢,编程语言会加SR文件的映射成一棵状木树,这棵树就是一个对象,然后我们可以对这棵树上进节点进行任意的增删改查。解析过去的节点,解析过去的啊,由于什么呢?由于这棵树啊,就呃这棵树全部都在什么内存中。我们可以解或者是解析过去的啊,解析过去的节点吧,嗯,可以再次解析啊,可以再次解析比较灵活,所以这边的优点呢,我说一下,其实就是说灵活啊,是一个优点,灵活这个优点解析过去的节点,可以在解析过去的节点啊,可以再次解析没问题。这个缺点呢,缺点严重啊,如果啊SL文件比较大。
08:07
可能会导致内存溢出。明白吧,可能会导致内存溢出。呃,其中这个呢,可以用来设置我们那个虚拟机的一些,你看这是什么呀,堆的内存吧,啊通过它啊这个长这个命令啊,或者这个参数呢,可以设置我们什么呢?对它的大小。啊,对称大小这个啊,可以设置我们占内存大小吗?占内存大小啊,这是这是参数吗?这是可以设置的,可以调整Java虚拟的内存是固定的吗?不是啊,这个是可以调整的,你分一个G行不行啊可以啊。你分一个G给加上虚拟机可以没问题啊,得通过这几个这几个参数来设置啊。
09:04
具体怎么设置,这个不用看啊,到后面自然会有,如果S文件比较大,可能会导致内存溢出。即使啊,即使不会导致什么。即使不早治。内存溢出。也会耗费什么大量的什么内存。明白吧,你会使用大量耗费大量内存啊,嗯。内存少了啊,项目的运行效率自然就降低了啊。所以呢,咱们要知道啊。什么情况下选择端午解析,如果想很灵活的啊,如果想很灵活的操作每一个元素。
10:00
选用杠解析。但是啊,注意。文件需要。小一些,至于这个小的话都是相对的,那要看你将来的加上虚拟机有多大了。明白吧,啊,其实这是大级啊,是这样的,优点是灵活,缺点的话,这个东西其实还是很严重的啊,它的效率不高。因为你想有的时候我这个文件啊,这个SL文件,我可能是不是只要你SL文件中其中一个元素啊。我这咔咔的60多兆,我都扫一遍。是吧,或者说我全部加载到内存,我有点浪费了,我60兆全部加了内存,在我内存就占60兆的一个空间,它其实并不是这样的啊,我是我这个60兆的东西放进去,它并不是60兆了。它变成100多兆了。因为你现在不是简单的一个文件了,你可能到内存中需要创建一个对象嘛,你每个节点一个对象,每个节点一个对象,你想60兆一个对象该做多少多少个呀,是吧,所以这个东西其实很难说啊,表面看60兆文件,其实到内存中就不是60兆了,就是有可能嗯。
11:09
所以呢,一些非常小的文件,比如说这个文件呢,里边没有多少,那你可以用这种解析方式直接装载的内存,所以它可以很灵活的进行操作,但是sax解析不行,看sax解析啊,它就不会出这个问题,他就不会出这个内存溢出的这个这个问题了。它的原理是这样的啊,Sax解析呢,Sax解析是基于什么呢?事件驱动型的啊,事件驱动型的解析方式。嗯,这个不好理解,基于事件驱动性解析方式,它遵守什么呢?它的解析,它的解析不需要将什么整个SM文件全部装载到什么全部装载到内存中。S基于事件驱动型的解决方式,它的解析不需要将整个S文件全部装载到内存中。
12:01
呃。解析的时候呢,时候是有顺序的啊,是有顺序的。从上啊,在SL文件中。从上。往下啊,从上往下依次解析,依次解析。遇到。开始标签啊,表示发生了一个特定的什么事件。此时执行一段什么特定的什么程序,遇到结束标签啊,表示又发生了啊,又发生了一个特定的事件。啊,此时执行一段特定的程序完成解析。Sax解析呢解析呃。
13:04
有问题啊,我在下边说吧,这边的它的优点是什么?不需要装载什么SM文件啊。所以不会耗费什么,不会占用吧啊,大量的什么内存,适合什么大文件啊,适合大文件,缺点是什么?记住了啊,解析过去的几点不能返回头来再解析。还有顺序啊,解析过去的节点,那不能重复解析,除非又重新吧,啊,除非重新从头开始,明白我的意思吧,啊,除非从头开始。什么情况下选择S解析,就是大文件啊,适合使用sex解析,其实这个区别这俩呢,其实说一下啊,就跟这个BS和这个CS一样。
14:04
他谁也不能替代谁,你说这个东西就能替代这个不是这样的啊,这个sax解析呢,和这个do解析呢,它谁也不能替代谁,各自有各自的优点,各自有自的缺点,他没有一个东西是十全十美的,他不能说就是他把所有的事都解决了。不能。所以这边呢,要知道M2解析呢,包括两种方式,一种是do,一种是SSAS,比如说现在呢,我在这有一个文件叫什么外点S,你打开它打开它打开这个文件,这个文件等项目开发完,开发一年多的时候,你像这个文件会很烦了。是吧,那这个文件很庞大,怎么解析啊?你这个用sax解析是怎么解析的?就是从这个位置开始走走走走走走完一行换行走走走走,遇到开始啊,往下往下往下,这样往下往下遇到开始标记发生的特殊事件去执行一段特定的程序,遇到结束标签表示发生的特殊事件去执行的,这是基于事件驱动提息方式,它不需要将这个文件装载到内存中,它从头从上往下依次解析你刚刚解析过的节点,不能反过头来再解析它,你要想再次解析,你必须回到这个位置上,往这再重新解析一遍才能解析。
15:15
所以sa解析它不是把它装完内存,但是do解析就不一样,Do解析是他不管你这个文件有多大,放到内存里边,现在内存就是构造对象,这个是个标签对吗。所以它会构造一个对象出来,对吗?这个标签是这个标签的子标签对吗?所以这个标签也会构造一个对象,而这个对象可以作为这个对象的属性吧,而这个标签的话,是不是可以作为这个对应的属性啊,就是A里边有BD对象里边有C吗?C里边有D吗?这样去嵌套,大家把这棵树是不是创建出来一棵树是不是只有一个根啊,将来我们是不是可以通过语言对我们这棵树上的几点进行任意的磁产改查吧,达到达到一种解析的目的吗?当然这两种方式谁也不能替代谁,你说你说就这个什么什么全部加载内存好,那不一定啊,这个文件如果超大的话,那你内存会占用很多的。
16:00
还有SX解析也是不行,SX解析这个东西,你解析过去的节点,你不能干什么呀,不能回头再解析,你要回头再解析不灵活,你回头再解析的话就会有问题了。所以就是这样,理论上是这样说啊,无论是哪种啊,你不不管是C加加啊,还是什么其他的元去解析M都是包括这两种方式,都是选用这两种啊,那要看如果是小文件我们可以选用杠,如果是大文件的话,我们可以选择sax叫sex解析。啊,那么这个其实我觉得啊,你这个也可以从网上找一些资料,这边我来查一下啊。看看有没有这个例子啊呃,Java语言解析呃,解析HR,嗯。加元基于sax的解析。我看这这上面有没有啊。哎,你看见了吗?他说需要继承一个类型啊,这个类型叫or Canada?
17:03
At什么意思?默认的一个处理器吧,啊,默认处理器有很多方法对吧?有什么in the document,什么in the element,还有start element吧。啊。这个方法什么时候执行?这个方法在解析开始元素的时候,是不是会执行啊,会执行啊,这个default往上看一看啊default。Java X X码pass ass pass as pass factory是吧?Helpault,他继承是这个是吧,这个。解析XL文件的,你只要现在写一个类继承它,当你刚开始解析XL文件的时候,而这个XL文件解析到头的时候,它会自动调用你写的这个类里面哪个方法呀,Start。Element它自动会掉这个方法。解析到结束节点呢,它自动会掉下来,这个方法。
18:01
哎,这是回调吗。我们接触回调了call back,我们AX里边是不是接触过。好好大家回,大家回回顾一下啊aja编成第几步,编程第二步的话,我们是不是需要注册回调函数,注册回调函数我问你执行到第二步,那函数执行了吗。不执行第二步的作用是不是只是为了注册,当我们发生这个事儿之后,那个函数是不是才会执行,所以这个是不是就是回调?你先把这个类既实现这个结果,先把方法实现了,这个方法它不会执行,只有当你解析SL文件到S文件某一个特殊的标记的时候,而这个类的方法会自动被调用。这是回调方法吗?这都是回调吗?这就是基于事件驱动型的解析方式,这是真正的sax解析。真正的S就是这样解析的,你写一个类实现所有的接口,这个Java中也应该有啊,加法中,嗯。
19:03
JDK中。自带的啊,自带的sax解析。我看看啊,这个ORGX啊,应该是这个org啊,应该是它是吧,这应该有吧,打开啊这1K。嗯,找那个最后吧,Org,什么是这个吧,有个default吧,嗯,这个。是这个吧,就是它你看是不是很多方法,嗯,结束元素啊。开始元素,开始文档,接收文档开始的通知,接收跳过的实体的通知啊,实现你把这些方法都实现了,接收元素中字符数据的什么意思?当我们有一个学生标签,在这个学生标签里边我写了一个张三这样一个普通字符串,张三是个普通文本吧,当我解析到张三的时候,会执行谁啊?
20:01
会提他,而想必这个应该是什么,这个是不是就是那个张三?字符数组吧,应该是这个。阶级。这是CDK里边自带的,你看这K里面有没有搭三解析啊,你看这个类型你熟悉吧,尤其是这个方法叫get,什么element BYD,你见过这个方法吗?你是不是见过这个方法呀?哎,这个方法名谁定的呀,我说过了,你看那个包谁定的,W3C定的,但是这个程序谁写的。三解的啊。S去实现了W3C制定的规范,明白我明白我的意思吧,哎,另外JS有没有实现这个规范啊,也实现了这个规范吗?JS的任务是不是可以解析HTML啊,我们可以解析啊,而我们加va言的话,我们也可以解析SL文件啊,SL和HL是不是都是标签语言啊,解析这样。所以这边呢,咱们得认识一下这个东西啊,你从网上搜一下多了啊,带这个东西的。
21:00
好,那这样的话咱们不说这个了啊,简单的话你能跟能跟面试官呢,聊上来DOM解析和s sax解析的区别就行了,DOM解析其实你就说上去将XR文件全部加载到内存中,然后我们对这棵树上的节点进行增,进行任意增长改查,我们比较灵活啊,解析后这些解析过去的节点可以再次解析,缺点就是这个文件如果过大的话,我们内存就溢出了,可能会占我们用大量内存。sax解析不一样,它不需要加载文件,它从文件的头开始解析,一行一行自上而下上去解析,解析到开始节点,发生一个事件,执行一个代码,只解析到结束节点,我们去执行一个方法了,基于事件驱动性,解析方式有顺序,不需要加载文件,所以呢,它不会耗费大量内存,但是有缺点,解析过的节点不能回头,如果再再解析的话,你必须从从文件的头开始再解析,所以不灵活,把这个do和SI解析的一个优点和缺点都给它说上去,另外给它说上去,Do解析适合什么小文件S析。
22:01
B是个什么大文件?都说上来就行了啊,也不能说人们到你来解析解释一下这点什么有什么区别,这不说不上来,这不行啊,下面呢,我们看一看啊,作为Java同学就轮到我们本家了是吧?我们应该怎么去解加面呢这样的啊,大家看一看Java相关的啊,开源项目有哪些呢?Java解析什么XM相关的开源项目有哪些1SOME。啊,刚考。其实是这个啊,叫down from加va啊,这个四呢是谐音,明白吧,是英语单词是够了吗?实际上for呢,是这个for是吧。对吧啊,咱们改这个啊叫刚放假专门为Java语言准备的什么解析吧,解析啊刚放这我在这已经给大家准备好了啊,你不用从网上下载了啊在这呢,在SL这,嗯,然后呢,这边有个do play吧,看好了这是do play啊然后呢,这个呢是从网上给大家保存一个网页啊,你就不用管了,这个解压缩之后就是它明白吧,打开,然后呢,打开这里边呢,有没有炸包啊。
23:19
有没有啊,这是不是炸包炸包吗?所以说要想用到用咱包类这个开源项目的话,大家想一想,是不是得先导炸包,把相关的炸包是不是导进去啊,这是核心炸包啊,这是源码,这是什么帮助文档。明白这意思吧,好,这边呢,我们就用这一个就行了啊,还有一个叫sit down。Sit down sit down啊另外呢,其实还有什么。还有JDK啊,我这样吧,Java呢,解析SM相关的开源项目啊,Get啊,还有等等等等其他的,接下来我说一下啊,JD呢,其实啊,JDK其实自带了一套。
24:03
啊是实现谁的,是实现W。3C什么W3C规范的吧,啊,这是实现W3C规范的。是哪个包啊?叫什么org什么W3c.fun吧,嗯,这个还有哪个包啊,Org.S啊,点哪个来着。包什么来着,我给忘了。这东西太多了,记不住。这个吧。这个啊,可进一看就知道这名就知道了,上面这个一定是基于什么呢?道解析的是吧?下面这个是基于什么呢?这是基于道的解析啊,这个应该是基于什么呢?Sax解析对吧?嗯,我说一下这东西太多了,光开源项目就N多个JDK用内置的一套解析了,当for这算一个,Z道算一个,咱们现在就应当for这吧啊嗯,你后期会学SSH3个框架,其中一个H框架叫har har里面解析配置文件S文件的时候就使用了谁。
25:19
所以我们重点把这个讲一下,行吧,到方讲一讲,这咱们不说啊,你有兴趣可以从网上把这个这个开源项目再攒下来啊。另外呢,咱们还得配合什么,为了提高我们解析SR文件的效率啊,为了提高我们解析SR文件的效率啊,还涉及到什么。擦pass啊,还是个擦pass是一种路径匹配方式啊,是一种标签的,是一种标签的匹配方式啊,匹配方式类似于正则表达式。同学们,类似于这个点是可以让我们程序,让我们程序快速,什么快速啊,定位XL文件中的什么某个标签,明白这意思吧,嗯,所以呢,要想解析XM解析XL文件啊,涉及到哪些技术啊。
26:20
Down for z z down啊应该是杠啊,不应该是加号,应该是杠,然后再加一个什么W3C是吧,再加一个叫pass。明白我说的意思吧,啊。大家要看懂我的符号啊,这个我不是写的加号啊,写的是或者。明白我意思吧。就是用down z这个插件啊,或者是j do或者是W3Z的呀,加上一个叉pass。可以达到解析文件,但是你这前面这几个任任意选一个吧,选一个咱放这吧,咱们啊加这个行不行,解析这就是S文件行了。
27:05
讲了两节课的理论了啊,咱们该该该写代码了啊来。咱们写代码吧,咱们啊。老讲这个东西,其实你就就懵了啊。没什么兴趣是吧,咱们写代码了啊,来这边我给一个什么呢,我想想啊。我给一个给一个给一个数据库配置文件行吗?我在S2C下边建一个啊ddcon.s码对吧,我建这么一个文件,然后呢,我决定啊,在这个文件中呢,我写一下S码version是什么1.0啊includingding吧,等于GB18030,写上之后我们这写上DB con吧。然后写上driver啊,写上driver,写上URL吧,是吧,再写个Yoga啊,再写个什么password吧,把这个都配上去啊,这块oracle.g d DC driver.oracle driver我们不写很难的啊,这个写上g d DC or at local house1521北京partner吧,这边的用户名我们叫Scott是吧,立马是tIgEr,大家呢,现在就把这个S文件中这些信息给我拿出来。
28:22
明白吧,就把这个信息这个信息,这个信息这个信息拿出来,好,接下来我就开始写程序,这边呢,我建个包。放点北京的点加呃点点SL吧,行吗?S啊然后呢,我这边呢,写第一个例子啊,这个例子叫test林好,我多方面吧,给大家用一下啊,我先使用一种方式,就是JDK内置的。或者JDK自带的啊。这个是作为了解啊,使用JDK自带的什么杠解析啊XL文件。
29:00
使用JDK自带的DOM解析SL文件。使用JDK自带的。Do解析。这边文件啊,这个不是写是什么,是读读出来啊,怎么写呢,这个大啊,对了,我这写上吧,这是一个了解。啊,不需要掌握啊。这个以后呢,你。我一般也不用这个JDK内置的啊,一般都用这个啊叫for z好了,那这样的话咱们来看一看啊,这边怎么写呢?我就直接写了,第一步是创建文档解析器工厂对象啊,我也就不再翻阅API的帮助文档了啊。我不再翻译API文档了,就直接来了啊,The document builder factory啊。Factory等于document builder factory new instance创建完之后呢,通过文档解析器啊,创建文档解析器对象你工厂都有了,你肯定是通过工厂去造这个东西啊。
30:16
这是一个文档解析器builder factory new document builder以文档解析器有了之后呢,开始解析X文件啊,怎么解析XMR文件的这个build啊,啊,这有异常是吧?不管了啊,下面呢,咱们看一看,这边应该调用pass方法表示解析new一个file,这个file呢需要一个pass是吧?我们呢在这定一下这个pass,这是文件的路径,New一个file,然后搞包,接下来它解析之后会返回一个什么类型。Document。Document document好,这个document大家知道是什么吗?啊,大三C的啊,别打错了,这个document就是什么,就是do树啊do树。
31:06
告诉我们数啊,在内存中生成了,生成了一棵树,明白吧,生成了一棵树啊,就在这了,哎,这个路径怎么的,还记得吗?怎么写该文件正好是放在我们S2C下边的啊,所以这个文件应该是放在类的根路径下的啊,要想拿这个文件,大家还记得吗?怎么拿?点current threat.get contact class load.get resource是吧?是这个吗?这个文件能写叫DB con,点什么吧?嗯,然后点什么to your,点什么get pass是吧?是这样吗?我们这样吧,就怕我前段时间不是写过这个吗。这个路径能拿到不能来看一看啊,这不拿到了吗。是不是拿到了,那你得会拿啊,这样拿好了咱们助教吧,接下来你拿到之后,你想一想我能不能获取根元素,这个文档都有了,你根元素肯定能拿document.get。
32:10
First child是不是返回个note呀?叫什么root notde吧?啊root note,那接下来你想一想,你把这个note都拿到了,你是不是就可以获取note里面相关的东西了,来获取什么?我获取根元素的什么,根元素的名字怎么获取啊,System输出叫root notde.get。Name是吧?没有这个name get no name。是吧,他应该还有一个方法吧。来这样我先运行一下啊,应该是根元素是这个吗。根元素好像是这个是吧。哦,根节点果然是他吗?是这个吗?这个是吧。哎,这这这就是根基点,你再看一看有没有你有没有你熟悉的啊,你document在这调一些其他的点,Get,你看tribu是什么意思啊。
33:07
属性嘛。是不是属性啊,或者说你现在不掉它,你现在有了根,你这个根都有了,根有了之后你想掉它的,你想获取属性,你这个根基点掉一下,点get attribute能不能获取属性啊。只不过我们现在这个歌里边是不是没有加一些属性啊,我没有加什么name,什么Oracle啊,嗯,这些东西是吧,我没加,我这没加我就不写了啊,我简单的就获取这些文本就行了,好那么我就继续了,怎么做。来,我们试一下document,你看这个方法熟悉吧,叫get element by什么你看。是不是YID呀,那ID咱们这有ID吗?咱们这个文档里面有ID吗?没有ID啊,所以这个文本不能用啊,用不了。我们没有ID嘛,是吧,但是我们document再看一看还有没有其他方法点get element。
34:07
哎,T name,哎,这个是不是可以呢?T name是啥意思啊,标签的名字吧,是有这个标签吗?所以这个时候我尝试一下啊,哎,能不能拿这个东西。这个返回值是什么东西啊?哎,是不是闹啊,为啥呀?他为啥是个弄个呀。因为这个标签有没有可能有多个呀,有可能是吧,啊有可能。那我想获取一个,怎么获取点,你看跟下边是不是有关系,找到哪个方法有下标啊。是不是这个这一该写个零了。能理解吗?那再来看item的反馈值是什么?哎,Notde吧,哎,拿到notde了,我这个叫driver notde吧,拿到了,拿到之后的driver not,我想获取文本,怎么怎么获取啊,Driver not的点get types的content经拿拿到了啊,Driver,那这个时候你把driver说出运营。
35:16
什么第一步,什么创建文档机器工厂又是文档机器啊,然后又是拿文档,拿根元素,现在我不想获取根了,不想获取根了,接下来我直接拿到文档之后,我调文档的一个方法叫get elements by tag name,接下来拿到这些元素之后,我点item,零零之后拿到一个节点,节点调这个该test content就可以拿到文本吗?那这个时候接下来怎么写?我能拿其他的吗?URL能不能拿,我再拿其他的u name有行啊,我还有其他的叫叫什么来着,叫叫叫password是吧,我拿吧,怎么拿这个,这个咱们写一行吧,怎么写document.get什么elements by t elements by elements by name嘛,这写什么URL嘛,点什么ITEM0了,然后点什么the get tax content是这样吗?
36:09
是不是这么写啊?你下边的话你也一样吧,你写就行了,来写过来,只不过这块写什么呀,User呗,这写谁呀,Password啊写上,那接下来你就输出吧,输出URL是吧,那这边RL啊,下边呢,咱们就输出啊U下面我们再看一看这边输出谁啊password吧啊直接点右键运行就行了。这都能拿到啊。那具体的细节,其实啊,大家必须得有一个什么呢?有一个自学能力,什么意思,学了这么长时间,你面向对象开发,你拿到这个节点之后,你调一下,你不是有买一个例子吗?是吧,你调完之后,你觉得猜一下方法,你会猜吧。这的英语是不是好点啊?
37:01
是吧,啊,英语好点,你要获取子集点,你你想那个方法呀,获取子集点获取跟什么有关,Get吧,子集点就是孩子呗。是吧,Get child nose。是吧,获取子节点。拿到节点之,你想获取属性,你获取属性get的啊,因为是属性啊是吧,所以这些方法都是猜的啊,有些东西其实你要学的话,你就猜一下子,诶能跑出来,那以后就是它了。要实在跑不出来,从网上搜呗,就这样就行了啊,所以得有一个能力啊,就是这个自学能力了。的自学能力。咱们原先啊。原先是在对面一个班对面啊,就是那个。几教室四教室是吧?四教室有一个学生啊,叫什么名我忘了啊。嗯。他的动手能力就很强。
38:01
啊,为什么他的动手能力很强呢?因为啊他呢有这么一个经历啊说一下吧,在学校啊,他们学校内部呢,有一个培训。这个培训呢,历时四年时间啊,就是整个大学呢,就在培训就是做Java软件开发。但是好像学费是多少钱,是20多万吧。20多万啊,分期付分30年,分30年啊,付款好像有这么一回事啊。就从大一开始就学编程。不讲就讲完记录,你把这个项目就你自己练啊,练完之后呢,我我给你指一下,老师给你指一下你的项目表存在问题,纳粹学生练出来就是动手能力很强。就这么练出来了,怎么做一不会立马百度。立马谷骼从这找东西,最后就做出来了,反正这个收费是不是有点贵呀啊。再说跟买房子差不多,这买房子分积富是吧?
39:01
你挺有意思啊,我还是第一次听听这这种这种办法是吧。四年时间,嗯。出来那真是啊,最高的也确实有一万五的啊。那出来就是差不多你相当于工作四年呀,是吧,你这手把手教啊。关键是你你这个这个项目的动手能力很强,你的设计也能上去,但是战线拖的有点长啊,学费有点贵,嗯,要是战线再能拉的短一些,学费再稍微便宜一些是吧。那估计动手能力就上不去了。是吧,你给他四个月他能达到吗?达不到啊。所以,所以这个东西其实挺有意思啊,以前有个学生叫什么名来我忘了,他说的,我实在是受不了了。我来这来来个集中训练嘛,四个月不再等四年了,后来出来之后呢,第一个找到工作应该是啊,应该是第一个,因为他有底子。
40:04
他的动手能力确实很强啊。嗯,不会的,就百度呗,啊,甚至这手机你看手机哐一上网手机都能找到答案啊,很快还很快啊,这就是动手能力,嗯,第一个就找到工作了,好像应该是9K吧。9K啊,也不也不上,也不也不拿什么一万五了是吧,时间太长了,你想20万是吧,30年还。要不我受不了行吧,咱们不看这个,这个是JDK自带的,接下来咱们用一下do这行吗。又像是钢炮震啊,就像谁呢这个。嗯,用下它,嗯用它呢,还是do解析啊,所以这样啊,嗯,我在这呢,点右键啊,新建一个文件夹吧,叫Li行吧,然后我把这个文件呃复制一下放到这行吗?好了放到这,放到这之后呢,我把这个导进来,嗯导进去怎么导啊,属性吧,Build pass了library吧,添加了在哪啊走走走是吧,找到加va project07找到X吗?Leave吧,是它吧,打开OK啊现在就过来了。
41:17
嗯,你看啊是吧。想截屏是吧。这个你这个不用写吧,大家知道为什么我我我粘过来这吗。为什么把这个文件粘过来呀。就是你要找我这个项目肯定会有问题。如果我要在这不建这个包的话,我这个文件要是不引用它的话,可能会出问题。因为我这是什么哪个盘是D盘吧。是吧,你那个项目可能在其他盘里边,所以你导的时候可能项目会报错,所以我在这建了一个文件夹,我把这个炸包呢存到这个地方,然后我这个倒的地方导的那个炸包就是在这个里边炸包。
42:00
将来你拷贝我的项目的时候就不会出错了啊,导来导进来就不会出错了,所以我这样这个可以没有啊,你删掉它吧,是吧,删掉之后你这个账包我是不是可以自己找我那个其他的一些杂包啊,其他位置的杂包啊,不一定非得找这的啊,所以我加上去行,这边我再来个例子啊TEST02啊,这边我建一个类吧,这个。建一个类啊TEST02好,这边我使用当啊。使用do for day啊叫do for day啊组件啊,或者开源项解析SMR文件,这个过程还是读啊还是读。读。读谁呢?我看看啊,还读这个得了。行吧,还读它这个你得掌握啊,读SMR文件,读取读SMR文件,另外是基于什么方式的啊,基于do还是基于DOM方式啊,但是很奇怪啊,这个名字仍然起名叫sax reader。
43:12
啊叫reader,用sax reader。这是创建啊解析器对象啊解析器对象,然后呢,Reader啊注意你看这个是哪的。Or都放这里边了吧,然后reader里边有个方法叫什么叫read,里边需要有个什么什么类型file吧,File啊,Pass是这意思吧?好,那这样的话是不是把这个pass拿过来啊?咱们拿这个pass还记得吗?th.current th.get contact.get resource吧,这写什么DB con点是这个文件吗?点X more,点什么to ui.get pass是这样吗?拿到这个文件的路径拿过来啊,接下来呢,我们这边呢,大家看read方法返回值是什么?
44:13
来练一下源码吧,走文件夹哪呢这个或者说练一下压缩包吧,我看能练上不能啊,走走走。走走走,D car07smile come,点它打开,OK过来了啊。这个嗯,不是这个错了。这个啊,返回什么document,所以从这得出一个结论吧,同志们啊,虽然表面这个单词起了一个名叫sa reader,但是它底层使用的还是什么解析do解析啊,所以这边你不要被他迷惑了,是这个还是上面那个?哎,下边这个是吧,下边这个啊,所以这个是获取什么,获取文档对象啊,文档对象还是什么呀,叫倒树啊还是倒数。
45:04
呃,这边呢,Throws exception,嗯,就是这样,接下来呢,拿到这个document之后呢。来看看document啊,里面有个element方法。Document先过去根吧啊,获取根元素,获取根元素获取根元素啊,注意这边呢写上了啊,虽然使用了sax reader啊,但是还是基于DOM的解析啊方式,我们今天呢,不会讲sax解析啊,全是do。全是DOM解析啊,没有sax解析,今天都用DOM解析。然后呢,Document底下盖的什么root element一看就知道获取什么根元素吧,啊获取根元素,拿到根元素之后呢,我现在哎这么多是吧,哪个这个吧。那这就行啊,接下来呢,我们可以获取如根元素的一个名字,点get name,哎,确实有啊,点右键咱们运行看一看这个方法输出的是不是还是这个行继续啊,这个助调根元素有了之后,咱们来获取啊,获取的根元素下边的元素,根元素下边元素打开这个配置文件,根元素下边这个元素吧,这个元素看看能不能获取啊,来获取叫driver元素,怎么获取呢?Root element,它有一个方法叫element。
46:29
直接跟上一个名字叫什么driver这个element方法呢,它会返回一个element,明白吧,它就会返回这个element,拿到element,这个element是个什么element呀,Driver element吗?嗯,Driver拿到driver元素之后获取driver文本,怎么获取driver元素,它里边有没有这个文本啊?获取这个文本怎么获取啊,Driver element.get应该是tax吧啊,就拿这个啊叫driver吧啊直接我输出driver就行了,点右键我直接运行。
47:01
是不是能拿到啊,再看看其实还有一个方法更便捷啊,直接获取元素的什么文本内容,这是获取元素,然后再获取什么。在获取文本吧,嗯,再获取文本,现在我想一步到位,怎么一步到位大家看清楚了,是这样,Root element有个方法叫element t。直接拿文本,这还是写谁?Driver还是写driver?拿到的就是driver,明白我意思吧,直接还是输出driver来我们运行。他可以直接拿文本。明白我意思吧,它可以直接咱们这个是一步到位,这个是先获取到元素,再调元素的哪个方法。Get text,这个是直接按text。再继续往下能不能输出。我直接输出了啊叫root element,点什么element tag似的,后边跟谁ul一个什么U,还有个什么他吧,嗯。
48:09
运行。我说一下啊,这个里面呢,我就不再加什么加属性了啊,这边呢,其实是可以加属性的,比如说加个name属性啊,加name属性是吧,加上去也可以啊,加完属性之后能解析不能可以解析。可以解析啊,Root element.get。有没有这个attribute,你看是不是有attribute呀,只不没有那个get吧,啊叫attribute人家。是吧,是不是也可以可以获取属性啊,这个我还是那句话啊,大家必须掌握一个叫自学能力了啊,你这边的话,你就试探着一下,反正你学了这么多了,是吧,你现在的点出来的东西应该大概能看懂了,艾它一定是添加的对不对?所以element像这个什么at attribute是干什么的添加属性吧,那么attribute今天是读取属性吗?啊,那get什么test,这获取文本啊,那get test什么tri,一看就知道叙述前后空白的。
49:06
是吧,所以这个东西你就自己看吧啊,咱们简单给大家提一提,有这么一个东西啊,Do解析开源项解析文件读啊还是读这个是基于do方式,接下来我们再进行往下再来一个啊。TEST03,那么这个呢,我看一看啊用什么这个还是用down for啊,还是使用开源项目啊叫down for加了啊down for呃解析XM文件,这次呢,来个写吧,行吗?咱们来个写吧,行吧,来个写啊还是基于什么告方式啊。怎么写呢,这个呢得看一下,好我们一起看一看啊,我预计啊,我写的这个文件长什么样呢?长这个样子。嗯,来s small version等于1.0,然后呢,加一个coding写上去GD1803018030,然后往下走,我加一个,比如说。
50:11
学生信息行吧啊,学生信息嗯,学生信息吧,行吧,加个杠吧一下在这边加一个啊这是什么呀?学生吧啊加一个学生啊,加一个学生啊,然后加上学生之后呢,我这边来一个学生有没有属性啊,学生ID吧ID啊110,然后这个学生呢,有没有名字呀,有名字吧啊有名字啊呃,名字加上去啊,名字加上去这个名字,比如说就叫就叫张三吧行吧,然后呢,我再来一个啊,比如说他还有一个这个性别。呃,性别男,行了,再来一个。120有小花。不是有一个人叫小花吗?
51:07
好像是那个谁来着。我想起来是谁了,是那个。不是啊,是那个是邓超的女儿吧,不叫小花吗?最近很火吗?没看吗?就是,虽然是这这个名谁起的呀?这名是,是那个谁啊?是那个邓超的儿子给他给给,等于是给他妹妹起的名,是吧,叫小花,我一听很俗气啊,小花好像不是孙俪起的啊,是这个是孙俪的那个儿子给他妹妹起的,起的小名。他儿子也就三岁吧,是吧。两三岁了就起名了,你看多牛啊是吧,行吧,咱们就就就就这个吧啊,咱们就就写这么一个东西出来吧,是吧,嗯,写这么一个东西啊,怎么写来开始了啊,步骤开始了,写文件告方式啊这个呢,咱们document document document啊,Document等于document呢,有一个叫helper,嗯,Helper啊,The。
52:21
没写错吧,你出不来呢,点create document行就这样啊好了,这边呢,首先呢,大家想想是不是在你想啊,你是不是要最后把它写到文件中。你要写到文件中,你是不是自己在内存里面先创一个数出来,你把这个数出来串出来之后,你将来是不是调那个right方法就写进去了,所以先造数啊,把数造出来,怎么造这个数啊。第一个,先创建什么文档对象,接下来我们添加根元素。怎么添加根元素?Document有一个什么方法叫ADD的?
53:05
是吧,这边呢,我就写上啊这个方法看看反馈什么。诶。我们的表。A的element应该是这个啊是吧?艾添加元素啊,这个元素呢,咱们添加根元素是这个名字吗。是这个是吧,啊就放到这吧,那这样的话,这个方法会返回一个什么呀,Element是吧,Element这是root吧,咱们就改成叫student in four吧。元素行吧,好,学生信息节点嘛,好就这样高说这啊拿过来看清楚啊,要写这么一个出来,接下来你应该给一个学生这个信息节点加什么就行了,给学生信息节点添加什么子节点吧,叫什么。学生吧,学生,节点怎么加?就是依次往下推进不就可以了,这个节点应该有个方法叫爱什么element吗?加哪个元素啊?
54:08
是不是加学生元素啊,不加学生元素啊,那这个时候反馈个element,这是不是student element啊学生节点,哎,你拿到学生节点之后呢。要不要给学生节点加属性,所以呢,给什么给学生节点添加ID,属性怎么加,你觉得应该怎么加,是不是挨的?呃,吹掉加属性吧,这应该是属性的名字叫什么ID是吧?属性的value呢,110Y加上去,那这样的话咱们是不是就可以,哎,这个有返回值吗?这个返回值是不是也返回element呀,其实它返回的是这个属性了,咱们现在是不是不需要返回它呀,我们是不是需要给这个学生再加个子节点呀,所以来给学生啊,给学生节点添加学生节点啊,添加叫什么名字节点嘛,名字子节点啊,名字子节点怎么加。
55:08
拿这个吧,学生节点点爱的哪个?名字吧,写错了又。是这个吧,加名字啊加名字之后呢,它返回个节点,那自然是什么name element吗?啊name,那返回名字几点之后,你想名字几点里边有文本吗?有吧,所以呢,设置名字节点文本啊,设置名字节点叫名字节点的文本的第2SET text啊叫什么?这叫张三是吧?把张三拿过来放在这啊这就设置上去了。哎,接下来。咱们是得加性别节点呀,加性别那我就直接写了啊,性别节点还是上面这个吧,只不过这个改成什么the sex element,这个是什么性别,哎,性别加上之后,性别应该是叫哪个呀。
56:05
叫吧,叫什么,这上面写什么难是吧,这个小花算了啊,小花不写了。还有意义吗?不写了啊。你是你会了吧,就加这个之后返回这个,返回这个之后就往上加子,加子之后想加属性会加吧,想加它的子想加他的你就拿到它吧,你要想加这个的话,你就拿到这个吧。听听明白了吧,你要是想加这个的话,你就得拿这个吧。你要想加这个的话,你就拿它吧。你想加属性的,你肯定也拿它。你想加这个,你肯定拿这个。就是说你只要拿到负负上添加一个子就行了。是这意思吧,嗯,永远是这个规律啊,那我就写了啊,大家想开始写开始写啊,开始写就行了,怎么写啊。
57:00
你把这个document造出来了,元素结构你都给它添加完了,接下来开始写怎么写的,这边有个as,呃,Writer as writer。是这个吗?As writer吧啊,New一个as small writer啊,然后这里面new一个什么呢?File writer啊,这里面呢,我们new一个file就行了啊,这需要个past,这呢写一个smart啊来我们上面呢,需要指定格式。啊,Outpput for forat等于output for the courage。Pretty print啊,然后form呢,需要调一个方法叫Co,一定要设置基,基于18030,因为我们这里面有中文嘛。是吧,设置啊,设置字符编码方式,设置完之后呢,把这个传进去,这需要一个pass吧,好,这个pass怎么写,你希望把这个文件放到什么地方。
58:13
你希望把它放到S2C下边吧?怎么放这边怎么写S2C杠嘛,叫student啊点什么S行吧,叫student吧S。把这个pass拿过来啊,这有异常吗?注意再听我说啊,最后写的这个文件我希望放到什么src下边。不是放到病下。所以我就直接写个src杠。如果这个路径我还有这个logo的话,会写到哪这个。点right,点点card right,然后点什么get,什么contact class,这么写的话,它会写到哪啊,把这个文件放到B下面了吧,他是不是把它放到be下面了,咱们这别放到宾啊,要不看不见了行吧,那students下行吧,啊,这样写好as'not writer啊,点right写谁啊,是不是把这个document写进去啊,把document传过来啊,写就行了,然后as my write,点什么close。
59:24
好,我们点右键啊,直接执行。没报错是吧,哎,现在怎么没有做文件,点文件刷新吧。哎,有了没打开是吧。这不就是那个吗。来布置一个作业啊,这个作业是将员工表的数据传出来,然后导到S文件中啊,作业啊,将EP表中的所有员工信息导出到SM文件中。明白吧,然后再来个作业啊,将M2文件中的所有员工信息导入到数据库中。
60:07
明白吧,这个作业是从哪到哪。是从DB到哪X哪,这个是从哪到哪X哪到DB,明白我意思吧,是两个逆向都要做啊,这个呢,我只是给你写一下一些方法,你就参加这些方法就行了。怎么去生成S码,怎么将S码搞到数据库里边,其实呢,我们不是上午说了吗,有一个工作叫实施吗?实施人员,实施人员呢,其实啊,给我们课后实施的时候呢,他肯定得初始化数据库吧。你要不出数据库,数据库里边是不是没有东西啊。一般出了多种方式啊。SQL脚本行不行?项目开发的时候准备个搜狗脚本吧,将来到那时候直接把这搜狗脚本执行,数据库里面是不是就有数据了?还有其他方法吗?
61:02
写一个SMR文件吧。SM文件里没有数据吗?将来把SM文件一执行,是不是就把它放到数据库里边了也行,所以哪种方式最常用的,这种方式是最常用的啊。嗯。就像这个吧,简单提一下啊,打开打开之后呢,我们看一下啊。来北。声音拍到的啊,打开,嗯,这个能找出搜索脚本吗。这个。这都导出去吧,点右键导出呗,是吧,Circleql吧啊比如这个吧,随便写一个吧,啊这选一个位置啊桌面啊a.circle啊或者一级oa.circle。啥玩意儿?一级OA点思考啊。保存导出。
62:02
成功是吧,完了这就行了,这个四后鱼都有了。是吧,你想建表吗?建表就这么建呗,是不是有数据啊,什么都有啊,什么百段,什么白板。倒吧,把它导进去是吧,倒的话先把这个不导了啊,倒的话你就直接直行吧,怎么直行圈A吧,把它拖进去吧,所以我们其实有的时候会这样啊,搞出来行了,这个先不用管它啊,总之呢,咱们这个就说到这了,接下来要讲一个重点啊啊讲个叉叉。大家知道这种解题方式是不是有点慢?是吧,肯定很慢。因为呢,它呢,咱们最好提供一种方式,能够快速让我们在SM文件中定位的,定位了这个元素之后,直接把这个元素拿到。是这意思吧,所以呢,咱们来看一下啊怎么用。我在这儿啊,有一个文件夹,大家也看见了,在这儿有个文件夹。
63:03
这个文件夹里边呢,嗯,怎么回事。这个文件夹里边给了大家例子啊,打开它,打开这个啊,那这边很多例子吧,我简单讲几个啊,Pass我说一下啊,这个也是通用的解析为专门安专门为安装文件解析准备的一些东西啊,类似于正则表达式啊,这个东西其实可以帮助我们快速定位文件中的标签,来这个叉pass一起看一下例子一。来看好了啊,这是什么意思啊,这个就代表获取所有的根节点啊,AAA这个杠代表什么意思啊根啊,红色的部分就被选中了,听明白了吧,然后再往下这个叉pass代表什么意思啊。获取所有的CCC节点,但是有要求CCC节点上必须得有什么AAA节点,而且AAA节点必须是一个根节点。明白吧,这是获取所有的AAA节点,但是要求AAA节点必须是一个什么根啊,这是获取所有的CCCC,要求CCC上面有AAA啊,AAA必须是什么根?这个代表什么意思?获取bbb节点,所有的bbb都获取到,但是为什么这个没有获取到呢?因为它bbb上必须有DBDDD上必须有AA,而A必须是根,所以这个值被选中了,其他的是不是没有被选中啊?好,这个过了啊。
64:26
看第二个。叉pass就是一种路径匹配模式,这是双杠啊,单杠是跟双杠是所有。这是叉pass的重点啊,单杠是根,双杠是所有,听明白了吧,单杠是根啊,双杠是所有,这是选中所有的什么B节点,明白吧,这是啥意思啊?选中所有的BDB节点,但要求BDB上必须得有什么BDDBDD可以是根,也可以不是根。
65:04
大家接收一个新事物呢,我希望你能够快一点接收啊,像这种东西,我说一下就是一种路径匹配模式,而这有这么多例子,你照着写就行了。它表示。根节点A表示根节点下边有一个CCC节点。这个表示有DBD啊,上面有ddd有DD上有AAA,所以这个被选中,这个没有被选中,下面这个例子呢,你就往下看啊,这个你不用记笔记,到时候你把这个例子打开。前六个就够用了啊,这是什么?所有的bbb节点,而这个是呢,所有的BBD吧,要求bbb上有ddd吧,所以这个为什么没有被选中。它上面是AAA是吧,好过了啊,再看第三个例子。呃,第三个例子呢。这是啥意思啊?获取所有的节点吧,该有要求吧,要求是上有ddd,上有CCCCCCC,上有AAA,而A是什么根,所以这边都获取到了吧?再往下看,什么意思?获取所有的bbb,但必须满足三层嵌到上面,有一层,再有一层,再有一层,上面是根。
66:10
明白吧,这是这是一种意思啊好,这是啥意思啊,获取所有啊,再看呢,咱们第四个例子。这个例子看一下。这是啥意思啊?哎,这是获取所有的bbb,不是啊,获取第一个BBD不是零啊,是几啊,是一在要求bbb上有AAARAA是什么跟这个是获取所有的bbb,呃,获取最后的一个bbb啊,获取最后的一个bbb写last括号,Last括号啊,这个是一定语法规则的B上面有AA是根。然后再往下看第五个例子啊。第五个例子呢,可能稍微难一些了,嗯,看这。这是过去属性ID。这个圈A是什么意思啊,Attribute。
67:04
呃呃呃。是这么想。是吧,这个A啊是什么呀,圈A。明白吧,圈A啊,表示获取所有的ID属性,所以这个和这个是不是选中了,嗯,这是获取bbb吧,但有要求bbb里边必须得有个什么属性,ID属性,所以这俩有没有被选中,没有啊,没他俩事,跟这俩是不是有关系,这个是啥意思,跟这个一样不一样一样要求获取里边有什么属性呢?Name属性呢,这个呢?哎,这个只要有属性就能获取。所以这三个选中了,这个是不是没有被选中,这个要求有属性吧,这个呢要求没有属性not。Not,还是那句话,大家不用记啊,看例子这个我不会删掉,你到时候下载就行了,放到移动硬盘里边啊,以后公司的开发的时候你带着就行了啊,这个。里边没有属性的吧,嗯,没有属性的啊,再往下看第六个。
68:05
第六个这个叉plus,再看一看,这是什么意思啊。要求选中所有的bbb,但有要求是bbb里边得有一个ID属性,而且ID的值不能随便写叫什么B,所以只能选这个了,这个呢,要求选中bbb节点,但bbb里有一个name属性,Name属性只是BBD,为什么这个选中这个为为什么没有被选中?因为这个有空格。看见了吧,因为这个有空格,他要的是没有空格的吧,大家会发现下面这个能选中这两个,这说明这个是忽略空格的吧。能,你不用记,还是那句话,能复制粘贴不?复制粘贴呀。这个不用记啊。这个对比一下人家这个例子给的多好啊是吧,这是获取所有的bbb嘛,要求里边有内部属性了,要求内部属性值什么呀?Bbb吧,没有空格的啊,这是不是这两个都选中,这说明是不是这个这个单词可以忽略空格前后空白啊行了够了啊呃,如果感兴趣更复杂的叉pass呢?你可以参考后续的例子行吗?接下来我们用叉pass来提高一下这个效率啊。
69:16
来我们选中的方法这边呢,我们写上这是down for加什么叉past叉pass啊。嗯,还是基于什么,还是基于DOM解析啊读啊读,快速定位SMR文件中的某个元素。行吧,怎么写呢?我们一起来写一下,比如说我们解析这个文件。我希望快速定位,密码怎么写?还是那sax什么reader吧,哎,Reader吧,你有一个什么sax reader吧,好,那么接下来那个reader,拿到个reader点什么呢?Wait吧,又一个什么fair吧,嗯,有个file,这是个pass啊,这个pass呢,咱们还是拿一下叫thad.current th.get contact class load.get with,写上DB con啊,点as now.two u,然后呢,点get pass。
70:24
都拿过来啊,这样的话,咱们这个是不把这个file倒过来,是不是就可以,还是返回一个叫document吧,Document好,那么大家想一想,现在把这个document拿到,拿到之后这个异常我们简单处理一下。现在呢,我要用叉pass了啊,所以这呢写一个X pass。X plus,这个X plus怎么写?你现在要获取的是哪个元素,这个。你上面根是它对吧,所以这个叉叉字怎么写,杠杠是吧,怎么写。是这个吧,啊,拿过来直接放到这个位置上能理解吧,那么接下来怎么写啊,Document是不是可以获取这个元素怎么获取,叫select。
71:07
Note还有一个方法叫select single node,这俩的区别是什么?我问你啊,这个password有没有可能有两个标签,有没有可能有多个呀,所以如果要你要是调的这个方法叫select no的这个方法就表示什么意思啊,获取所有满足这个符号了吧,啊这个返回值是什么?是个list吧啊例啊这个我助教啊,咱们不用这种方式,这是获取所有的啊获取所有满足什么擦past的。标签明白吧,我现在只获取一个啊,获取一个。满足什么叉pass标签的元素,所以这个叉pass是不是把这个pass拿过来,这叉pass presentma,这个时候它返回一个什么。
72:02
No是吧,这个no呢,我们可以看看它的地形结构啊。Note下面呢,有一个branch branch下面有一个element,我们用这个element明白吗?这个大家用过吗?这个就是说你现在知道父,你想找子怎么找,你现在知道负类型想找,想快速定位它下面有很多子,哪些子可以在这个地方选中。我们的。Not点右键有一个F4看见了吧。可以打开啊,你可以用一下这个可以得到快速开发嘛,这样啊element,所以这个时候大家想想,现在我们是不是可以做一个强转了,转成什么。Element吧,好,转成element,拿到element之后呢,大家知道element里有有一个方法叫什么element,点什么at at是吧。是不是要获取这个元素里边的文本啊,点右键运行,你看这样就快速定位了,来看一看,告诉我说Java long no class DeFinition found说over Jackson Jackson except,什么意思啊,像这种情况的话,其实啊,就是少少炸包了啊,炸包不够,因为你要用叉pass,所以这个位置呢,大家看一看啊,还需要引入引入其他的啊,在钢包这里边有个钢包这然后这有个炸包,是不是用的它呀,咱们现在在leave下面还有个Jackson,看见了吗?
73:26
把它打开,你看看有没有ord叫Jackson,然后有没有Jackson exception。是吧,所以咱们这个炸包少了怎么办?把它复制一下,把它放到哪啊,引进来就行了啊。呃,怎么引啊,直接放到哪个包。叫Li吧,放到Li下边,这边呢,得引一下吧,怎么引,点右键build pass吧,是不是空了呀,这边怎么办呀,添加吧,哎,你看是这个吧,打开OK,这样就引进来,再点右键运行就行了啊,所以这边要注意使用叉pass需要引入另外的一个大包啊,使用叉pass需要引入另外一个帐叫什么jackon。
74:08
再等啊。Jackson,什么什么什么炸啊。行,就这个吧,嗯,这就是插袜子。这样的话可以提高效率,咱们现在看不出来这个文件是不是不大呀。行,我再写一个例子啊,写个复杂点的。嗯,今天的东西呢。感觉讲的有点墨迹啊。来咱们看一下。再来一个DB con啊,点ex杠啊,Ext我扩展一下,因为大家知道这个数据库的配置其实还是很重要的,我来个复杂点的,上面这个配置文件是不是只能写一个数据库的,我现在来个多数据库位置啊。呃,1.0,然后呢,写上去including啊,写上去GB18030,然后写上去这边呢加一个DB con了啊,然后我在这写一个,嗯,写一个DB吧,这个DB呢是写上driver啊,写上那个URL行了,我来个复杂点的啊,可以多出1GOOD的,现在咱们升下级。
75:13
Password。Password,好,这样的话能不能把DB复制一下啊,我能不能配多个数据库可以吧,比如说这个是Oracle的,所以呢,在这我就写上oracle.gdbc driver.oracle什么driver吧,这边呢,我写上啊,Gdbc Oracle stick at localho。然后后边咱们加上1521端口,北京power note吧,用户名我们叫Scott,密码叫tIgEr,行吧,这边呢,我就写个买circle吧,com.com.my circle应该是这个啊,点gd bc driver啊,然后这边咱们写上去GDBC啊,My circle,然后下边有一个local host3306端口,比如其中有个数据库叫test数据库,然后里边有个用户名叫root啊,密码我也写成root了,随便写了,这个呢,我就不写了,我就写两个数据库行吗?这个数据库我起个名啊,叫DB type type叫什么类型啊,Oracle吧,下边呢,这个我加一个属性啊,你叫什么type吧,叫什么my circlelel吧?那现在你到底是用的这个Oracle数据库呢,还是用的my circle呢?全靠这个位置了啊,这个位置有个DB type,明白吧,这如果写Oracle,就表示你现在用的是Oracle数据库,如果你现在写的是my circlele,如果你这是A,这是B,听明白了吗?你这写A就表示用的是哪个这。
76:36
如果你这写B,就表示你用的哪个数据库啊,这个数据库听明白了吧,所以这边呢,我就写上Oracle my circlele,这边我选一个Oracle行了,现在我要求大家呢,把这个数据库里边,如果这是Oracle的话,就把这个信息给我取出来,如果我把这个改成MYSQL的话,就把这个信息给我取出来。明白我的意思吗?能理解吧,好,怎么做?
77:01
这边呢,我加上去T0几零五了啊,这边呢,咱们还是这样加什么。Do啊for day,然后加什么擦past啊,然后呢,咱们就是还是基于什么杠的解析方式啊解析。方式啊,还是读取文件怎么写这个步骤固定吧,Sax reader吧,Reader吧,啊,Reader,又一个什么as reader吧,嗯,Reader啊,然后念完之后呢,咱们这边呢,来看一看reader点什么reader吧,又一个什么file哈,那这边的是不是需要pass啊,嗯,Pass那个写一写,返回一个什么document吗?Document好,拿到document之后呢,咱们这边导包,嗯,导包破裂的啊,IO里边的找过来,Pass写一下,嗯,Pass等于点current th.get contact log.get result,还是一个叫DB,什么con-e s.SMA是这个吧,点叫two u two u r啊。
78:17
好,De get pass好了,那这样的话,咱们就把这个路径拿过来,来这个异常咱们不管了啊,第一步还是创建领导,第二步拿路径,第三步我们就达到document,拿到document之后,大家想想是不是应该拿这个东西,拿到这个串,因为这个决定了这个和这个吗?所以拿这个,这个到底是articleacle还是my circle,你可以把这个先拿出来,怎么拿叉pass写上,怎么写叫叉pass。来叉pass等于加上双引号把这个减了杠DB杠什么,哎,对了啊,这是不是有一个属性叫有一个标签叫d type吧,把DB type拿过来,那这样的话是不是就可以document有个方法叫select single的,是不是拿这个单个元素啊,把这个叉pass放进去的时候,它就可以返回一个什么东西啊元素element element,这个element叫DD type element。
79:12
明白吧,现在你拿到这个标签就相当于拿到了这一堆,你拿到这一堆就拿这个文本怎么拿。拿文本好说吧,其实就相当于调用DB type这个元素的一个方法,叫什么get tap,这个时候就会拿到什么,拿到DD tap吧,好,这个DB我们可以先输出来,我们点右键直接运行,拿到了DB type。The country get get resource。嗯,这写错了吗?啊,这个放错了啊,放到这。位置放错了吧。在这啊来运行能不能拿到啊,我如果这边改成MYSQL的话,大家看一看是不是就输出的是什么MYS吧,那既然是这样的话,大家想想这个既然是动态的了,我可以注掉了啊,接下来你是不是再写个叉pass,这个叉pass是什么?是不是定位这个还是定位这个标签吗?到底是定位这个还是定位这个标签怎么写叉pass。
80:18
擦帕写的时候是杠,DB可位杠后边跟什么跟上DB就是这个标签吗?DB标签上面是它吧,所以写个DBDB里边有没有属性?属性叫什么?叫type属性是吧?圈a type属性对吗?然后type后边到底跟着哪个值,到底这写Oracle还是写这个my circlele?是决定于你上面这个DB type,你把DB type拿过来放在这,加上双引号加过来就行了,这是不是一个叉pass。我再写一遍叉pass啊,这个叉pass有点难了,因为什么?因为我刚刚讲过,新东西你不能马上去吸收它,在这个位置上有一个叉pass,我再打开,我再打开,再打开,把这个第六个例子打开,打开之后大家一起看一看,这是啥意思?
81:11
这个啊是什么意思。拿B里边,但是B要求有个什么属性ID属性,ID属性的值还必须叫第一吧,所以这个时候你想一想,在这你写这个叉pass是不是只能这么写杠DD con,杠ddt-type吧,中括号,然后圈A有一个什么属性type属性,它的值叫什么Oracle或者是什么my circle,这个叉must是是不是代表获取这个元素,哎,错了,这没有type是不是DB啊。叫DB吧,来获取所有的DB元素,有要求DB根据有个什么属性,有type属性,而且type属性叫什么MYS,所以这样的话是不是就可以定位到这个标签了,这个标签它是不是就不管了,但是你不能写死成MYSL吧,所以你上面把DB type是不是拿过来放在这就行了,加双引号,加俩加号,把它拼过来,这样就是个串,把这个叉pass输出,你看这个叉pass啊,点右键运行。
82:07
叉pass就是这个吧,所以这个时候我不输出了啊,有了叉pass,你定定位元素怎么定位呀,Element DD element吧,然后强转element怎么写啊,叫document.select single吧,Select single元素,这个single元素把叉pass是不是拿过来就可以获取到哪个元素了,现在是不是就相当于你已经拿到了这一堆了,拿到这一堆你想获取这个元素简单吗?怎么做?很简单,输出。Driver叫URL行吧,我就写了啊,等于什么DB element.element text driver是这个吗?把这个加上四个,然后我们写上什么ul是吧,写上谁啊,U吧,写上谁啊,Password啊好,后边也改一改,这边呢我改一改叫U,这边呢改一改叫U,这个改一改叫password,好了,这边有输出啊,Ul,呃,Driver,嗯,好,这边改一下,这个叫。
83:14
URL这个呢叫yo,这个呢叫password,好,这个时候点右键直接运行,大家看现在拿的是买SQ数据库的信息吗?如果你现在不想连接买SQL数据库,请将这改成什么Oracle,那这个时候你连接数据库是不是就是Oracle数据库了?明白我意思吧,所以像这种强配置文件,像这种配置文件啊,咱们可能用的比较多一些,但是你要说用这种配置文件,其实你这个配置文件有点。有点不好啊,为什么,因为你这个东西有点那个太少了。咱们这样是不是切换起来比较方便一些,切换数据库可以改这啊,你这个改成买S,它就是买你这个改成二就是二数据库吧。
84:02
能理解吧,这个。行了啊,SMR文件解析一共写了五个例子。呃,东西也不少,行了,今天呢,咱们加班了啊。行吧,呃,今天内容就到这儿啊。把东西下载一下。然后把它写一下啊。休息下吧,啊休息下。
我来说两句