XML解析和写入

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四种方式的对比

​​

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352