美文网首页
2018-04-30—XML解析(DOM解析)

2018-04-30—XML解析(DOM解析)

作者: 季白zy | 来源:发表于2018-04-30 10:23 被阅读0次

    大家好,我们之前已经讲了SAX解析和PULL解析,今天我们来讲一下最后一种方式:DOM方式解析xml。


    同样我们还是先准备一下我们的数据。

    这是我们今天要使用的字符串,没错,我在以前的基础上又加了一个presdent(没错就是恶搞-。-)。

    然后开始我们解析过程:

    1.创建dom的解析器工厂,

    2.创建dom解析器

    3.获取用dom解析器获取整个文档,将整个文档读入内存。

    第一行是懒人方法,相信大家可以看懂,下面三行是正规的逻辑。

    4.获取标签集合,我们通过getElementsByTagName方法获取。

    这个方法传入的参数就是我们写的标签名字,他返回的是一个NodeList集合类型。我们的asd.xml中,school标签内的内容有presdent标签和class标签,所以我们可以添加这两个名字。

    从简单开始,我们就先添加presdent吧。

    因为presdent只有一个,所以我直接用item(0)获取第一个元素,也就是获取仅有的一个presdent了。

    到这里,我先给大家说一些基础东西和DOM的api中常用的一些方法:

    我们总说标签名,属性,文本,内容,这些专业名字我们今天具体罗列一下:

    上面这张图片已经说得很清楚了,大家体会一下(不要注意美观)。

    然后我们来看一下一些重要的方法:

    document.getElementByTagName(String )   这个方法是从我们读取到的文档对象中获取标签集合,具体获取什么样标签由String决定。

    nodeList.item(int)   获取标签集合对应的元素

    node.getAttribute();获取节点标签的属性,由NamedNodeMap 接收。

    node.getNodeType();获取节点的类型,我们一般用这个方法来判断当前节点是否是标签类型,一般和Node.ELEMENT_NODE比较判断是否是标签节点。

    node.getNodeName();获取节点名字,例如上面的presdent,name,id,sex,class。

    node.getTextContent();获取文本数据,这个跟上图对照应该都能知道什么意思了吧。

    node.getChildNodes();获取节点标签的子节点。student的子节点标签就是name,id,sex。

    一般常用到的就这几个方法,接下来我们继续看。

    5.我们刚才获取到了presdent标签节点。我们发现这个标签没有属性,那么我们就跳过,直接获取他的内容节点了。

    然后我们还需要一个PresdentBean类。

    新建一个PresdentBean对象。用来接收数据。

    我们进行了简单的if判断,让他给对应的属性赋予对应的文本数据(所以我们用getTextContent),

    现在我们来一个简单的日志,看一看数据是不是已经获取到了。

    看来我们已经成功的解析了presdent的xml数据。

    那接下来我们看class这个比较难得,其实他也不是很难,标签嵌套标签。但是这里面有一个坑,我还是想想给大家说一下,以免一些懒人想偷工减料,结果。。。。

    这里 有一个DOM中常见的陷阱,比如我们在调用node.getChildNodes方法,集合中除了我们的标签节点,还有上述所谓的文本节点,而且他经常是以#text等形式出现的。

    他在我们进行操作时候,一旦出现多重嵌套,肯定会有多重循环,那么它就会使数据层次、内容错误。

    为了避免这个方法,我们只需要在我们获取节点之后,来判断一下当前节点是否是标签(通过node.getNodeType方法)。

    好了,接下来我们一起来解析下面的数据。


    比较恶心的XML数据解析

    上述1-3步骤就不重复了,我们直接进行。

    首先获取class标签集合,然后循环遍历,在循环中我们获取了当前子节点,并且判断了当前节点是否是标签类型。

    给id属性赋值。

    我们又获取了classNode下的子节点集合,遍历,创建studentBean对象,添加判断。

    因为student下还有内容,也还有标签,所以我们在加一重循环,这次用来获取到内容值。我们看一下日志:

    看来我们也成功获取到了class下面这个复杂的数据。

    至于给bean类赋值,就交给大家来进行吧。毕竟每个人的逻辑都不一样嘛。

    相关文章

      网友评论

          本文标题:2018-04-30—XML解析(DOM解析)

          本文链接:https://www.haomeiwen.com/subject/bgkzlftx.html