DOM解析准备工作
---------------------------------------------------->
DocumentBuilderFactory.newInstance创建对象
DocumentBuilder创建对象
Document .parse("文件名”)进行xml解析
NodeList .getElementsByTagName("节点名“) 找节点
for循环实现 ----->>> Node .item(i) 遍历获取各属性。
常用节点类型
解析xml节点名和节点值
----------------》》》》》
NodeList .getChildNodes() 获取所有属性的子节点
通过 子节点实现 .getNodeType() == Node.ELEMENT_NODE判断类型是否是空格,换行类型
子节点第一节点值输出方式: childNodes.item(k).getFirstChild().getNodeValue()
直接输出子节点内所有值方式: childNodes.item(k).getTextContent()
SAX解析XML
步骤:
------------------》》》》》》
----------------》》》》》》
----------------》》》》》》
使用SAX解析将XML的内容和结果保存到JAVA中
=====》》》》创建全局的value和book对象
=====》》》》用集合AarryList来存储book对象
=====》》》》startElement开始后就创建新的book对象
====》》》》endElement后将book存进集合中储存,再将book对象清空
====》》》》依次判断qName是否是需要的节点名称,进行book属性赋值
====》》》》在characters中用value 接收所有的节点值,如果节点值不为空格或者换行就输出
JDOM开始解析前的准备工作
====》》》》先导入JDOM的jar包
====》》》》创建SAXBuilder对象
====》》》》InputStream将xml文件写入
====》》》》saxBuilder的build方法加载输入流
====》》》》用Document获取输入流
====》》》》Element的getRootElement()获取根节点
====》》》》用List接收根节点的子节点:.getChildren()
====》》》》继续解析,遍历输出bookList里每个bool属性的位置(也就是第几本)
====》》》》用List来接收每个属性的属性值 .getAttributes()
====》》》》遍历输出属性名和属性值
====》》》》对属性的子节点进行遍历获取子节点名和子节点值 节点.getChildren()
===》》 》》 JDOM 解析时乱码的处理
1. encoding改为UTF-8
2.====>>>> 调用InputStreamrReader的切换编码解析方法
====》》》》 在JDOM中储存Book对象
====》》》》先创建集合为Book类型,并为全局私有
====》》》》获取所有子节点信息以后,采用集合add()方法添加到总集合中,之后释放对象内存,便于下一次循环时使用。
====》》》》 关于JDOM使用过程中JAR包的引用(导出)
①先在本project中创建一个folder文件,然后把jar包放在该folder里面
②然后再该project中buid path --->>> configure build path中
③选择右方的的Add JARS ,选择该jar包并ok
应用DOM4J解析节点的属性
====》》》》 如JDOM解析一样导入相应的jar包
====》》》》创建SAXReader的对象
====》》》》通过该对象的read()方法加载xml文件,并用Document获取
====》》》》用Element的 .getRootElement()获取根节点
====》》》》再对象 .elementIterator()获取迭代器
====》》》》用while(it.hasNext())来进行遍历
====》》》》将it.next()转换为Element类型
====》》》》用集合来获得节点属性
====》》》》再用foreach输出节点名和节点值
====》》》》用迭代器来接收属性节点的子节点 .elementIterator()
====》》》》再用while(itt.hasNext())进行遍历
====》》》》再用Element强制转换类型
====》》》》输出子节点名和子节点值
四种解析方式的分析
DOM解析
SAX解析
JDOM和DOM4J解析
XML文件写入
DOM写入
====》》》》创建一个类便于获得DocumentBuilder对象
====》》》》创建createXML()类来新建XML文件的各个节点
====》》》》紧接着创建TransformerFactory对象 .newInstance()方法
====》》》》创建Transformer对象 .newTransformer()
====》》》》此对象调用transform()方法,new DOMSource(document),newStreamResult(new File(XML文件名)) 创建此XML文件
====》》》》让XML文件中节点换行 对象.setOutputProperty(OutputKeys.INDENT,"yes") 完成换行缩进
====》》》》需要在创建节点前将standalone设置为true(设置后在XML文件中就不会显示了)
====》》》》向book节点创建子节点 用 book.appendChild(name) 添加子节点
====》》》》设置子节点的文本内容: 子节点.setTextContent(“文本内容”)
SAX生成XML文件
====》》》》创建 ArrayList<>返回值类型的parseXML()方法,用于创建对象
====》》》》创建createXML()方法,创建一个集合对象
====》》》》用 SAXTransformerFactory 创建对象tff
====》》》》再用TransformerHandler 创建 handler 对象 tff.newTransformerHandler()
====》》》》通过handler对象 .getTransformer() 创建一个 Transformer对象
====》》》》通过该Transformer对象设置XML编码和换行缩进 tr.setOutputProperty(OutputKeys.属性,“设置的值”)
在设置ENCODING和INDENT时要放在设置Result之前
====》》》》创建一个File对象 再new StreamResult 为 Result对象
====》》》》在创建File文件时需要判断,如果f不存在则要创建这个文件
====》》》》将handler对象与Result对象关联起来
====》》》》利用handler对象进行XML文件的内容编写
====》》》》先startDocument()开始文本编辑
====》》》》用AttributesImple new 一个 attribute对象
====》》》》再.startElement开始加入标签,记得写完后要.endElement结束标签
====》》》》写完后关闭document
====》》》》向bookstore里面添加属性内容,用过addAttribute添加 要开始和结束该标签
====》》》》生成文本子节点,用foreach循环
====》》》》每添加不同的attr进入不同的节点的时候要先 .clear() 清空它的值
====》》》》然后用handler.characters来添加各个子节点属性的值
====》》》》由于不同属性下的子节点不同,所以增加每一个子节点判断机制
RSS
简易信息聚合(也叫聚合内容)是一种RSS基于XML标准,在互联网上被广泛采用的内容包装和投递协议。RSS(Really Simple Syndication)是一种描述和同步网站内容的格式,是使用最广泛的XML应用。
RSS目前广泛用于网上新闻频道,blog和wiki,主要的版本有0.91, 1.0, 2.0。使用RSS订阅能更快地获取信息,网站提供RSS输出,有利于让用户获取网站内容的最新更新。
利用DOM4j实现写入RSS的xml文件
====》》》》需要创建文件
====》》》》用Element创建子节点 addElement()添加
====》》》》用.setText()设置子节点文本内容
====》》》》用OutputFormat.createPrettyPrint()设置文本的完美格式 将对象插入到writer中
=====》》》》可以在OutputFormat对象中设置编码格式
====》》》》关于转义字符, .setEscapeText() false 就不会自动转义了,可以直接添加‘<’ '>'一类字符了
用JDOM生成XML根节点
====》》》》先Element一个根节点
====》》》》.setAttribute 为节点添加属性
====》》》》Document一个对象,XMLOutputter一个XML输出对象
====》》》》.output()输出document对象和创建的文件对象
====》》》》添加子节点和子节点内容
====》》》》同样的,想要设置格式 用Format 的 .getCompactFormat()创建格式化对象
====》》》》用format对象设置想要格式化的内容 例如缩进:format.setIndent("")
生成XML四种方式的对比