XML工具代码:SAX从String字符串XML内获取指定节点或属性的值
来源:互联网 发布:主播直播软件 编辑:程序博客网 时间:2024/06/16 00:30
有如下的XML字符串:
<?xml version="1.0" encoding="UTF-8"?><?Label SINFON|RATE|328|SUCCESS ?><RateHeader xmlns="rate.fidelio.2.0" rateStatus="ACTIVE" yieldStatus="NONE"> <hotelCode>SINFON</hotelCode> <chainCode>COL</chainCode> <rateClass/> <RateCategory> <catDescription>Rack rates</catDescription> <category>RAK</category> </RateCategory> <rateCode>WHL01</rateCode> <startSell>2013-12-02</startSell> <endSell>2015-01-22</endSell> <advancedBookingDays>2</advancedBookingDays> <displayText>Tour Series</displayText> <folioText>Room Charge</folioText> <shortInfo>tour series/min. 5 tours</shortInfo> <minLos>3</minLos> <maxLos>20</maxLos> <rhythm>W</rhythm> <packages>BRF</packages> <packages>IBF</packages> <marketCode>RAC</marketCode> <sourceCode>COL</sourceCode> <commission>0</commission> <foreignCurrencyDepartmentCode/> <departmentCode>100</departmentCode> <weekendDepartmentCode>100</weekendDepartmentCode> <rateBucket>LOW</rateBucket></RateHeader>
要求从中读取rateCode节点的值,实现方法如下:
public static String getRateCodeFromXmlString(String xmlString) { String rateCodeMessage=""; StringReader read = new StringReader(xmlString); //创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入 InputSource source = new InputSource(read); //创建一个新的SAXBuilder SAXBuilder saxbBuilder = new SAXBuilder(); try { //通过输入源构造一个Document Document doc = saxbBuilder.build(source); //取的根元素 Element root = doc.getRootElement(); List<?> node = root.getChildren(); for (int i = 0; i < node.size();i++) { Element element=(Element)node.get(i); if(element.getName().equals("rateCode")){ rateCodeMessage=element.getText(); } } return rateCodeMessage; } catch (JDOMException e) { e.printStackTrace(); return ""; } catch (IOException e) { e.printStackTrace(); return ""; } }
有如下XML字符串:
<?xml version="1.0" encoding="UTF-8"?><?Label EXPSD|RTAV|10000281|SUCCESS?><RtavMessage xmlns="rtav.fidelio.1.0"> <HotelReference hotelCode="EXPSD"/> <DailyInventories> <DailyInventory datum="2014-08-10"> <RoomTypeInventories> <RoomTypeInventory roomType="1KESS" generic="0" physicalRooms="22" roomTypeOverbook="0" outOfOrder="6"> <Tentative count="0" blockCount="0" resvCount="0"/> <Definite count="6" blockCount="0" resvCount="6"/> </RoomTypeInventory> <RoomTypeInventory roomType="1KSTS" generic="0" physicalRooms="81" roomTypeOverbook="0" outOfOrder="16"> <Tentative count="0" blockCount="0" resvCount="0"/> <Definite count="14" blockCount="0" resvCount="14"/> </RoomTypeInventory> <RoomTypeInventory roomType="2BSVS" generic="0" physicalRooms="34" roomTypeOverbook="0" outOfOrder="6"> <Tentative count="0" blockCount="0" resvCount="0"/> <Definite count="12" blockCount="0" resvCount="12"/> </RoomTypeInventory> </RoomTypeInventories> </DailyInventory> <DailyInventory datum="2014-08-11"> <RoomTypeInventories> <RoomTypeInventory roomType="1KSTS" generic="0" physicalRooms="81" roomTypeOverbook="0" outOfOrder="16"> <Tentative count="0" blockCount="0" resvCount="0"/> <Definite count="14" blockCount="1" resvCount="13"/> </RoomTypeInventory> </RoomTypeInventories> </DailyInventory> </DailyInventories></RtavMessage>
要求获取roomType属性的值,如果有多个,则以空格间隔,不获取重复的值。实现代码如下:
public static String getRoomTypeFromXmlString(String xmlString) { String roomTypeMessage=""; StringReader read = new StringReader(xmlString); //创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入 InputSource source = new InputSource(read); //创建一个新的SAXBuilder SAXBuilder saxbBuilder = new SAXBuilder(); try { //通过输入源构造一个Document Document doc = saxbBuilder.build(source); //取的根元素 Element root = doc.getRootElement(); List<?> node = root.getChildren(); for (int i = 0; i < node.size();i++) { Element element=(Element)node.get(i); List<?> subNode = element.getChildren(); for(int j=0;j<subNode.size();j++) { Element subElement=(Element)subNode.get(j); List<?> subNode2 = subElement.getChildren(); for(int k=0;k<subNode2.size();k++) { Element subElement2=(Element)subNode2.get(k); List<?> subNode3 = subElement2.getChildren(); for(int m=0;m<subNode3.size();m++) { Element subElement3=(Element)subNode3.get(m); String temp=subElement3.getAttributeValue("roomType"); String temp2=roomTypeMessage.indexOf(temp)>=0?"":(temp+" "); roomTypeMessage+=temp2; } } } } return roomTypeMessage; } catch (JDOMException e) { e.printStackTrace(); return ""; } catch (IOException e) { e.printStackTrace(); return ""; } }
0 0
- XML工具代码:SAX从String字符串XML内获取指定节点或属性的值
- Android 从string.xml 中获取字符串的值
- xml获取指定节点的路径
- C#解析xml(获取指定节点值)
- 利用 Jaxp (Sax) 解析xml文件--- 解析指定节点的值
- 代码中获取String.xml中的字符串?
- 获取xml里最后一个节点的属性值
- boost 解析XML文件,获取子节点的属性值
- Dom4j解析XML文本,遍历指定节点下的节点内容和属性,并存入List<Map<String,Object>
- 获取xml节点的值
- XML解析 获取节点属性
- sax解析 得到xml文档所有内容和获取指定标签的值
- 【慕课笔记】3-2 应用SAX方式解析XML—使用SAX解析XML文件的节点属性
- xml节点属性值
- dom4j 解析xml 获取节点值和节点属性
- 删除指定的XML节点
- 自定义控件从xml获取属性值的优雅写法
- XML获取字符串的IMG标签 string Convert To XML
- Spring如何实现IOC与AOP的
- 关于startActivity跳转引起的异常
- PHP文件上传类应用
- SSH端口转发的简要介绍-A short guide to SSH prot forwarding(1)
- android实现的计算器功能,可以加减乘除;可以倒退,可以清空文本,大家参考使用吧
- XML工具代码:SAX从String字符串XML内获取指定节点或属性的值
- 《老情书.张嘉佳》读后感
- 1、8天学通MongoDB
- Shell脚本中变量$
- while中尽量不使用Continue,不论什么编程语言
- LA 3942 Remember the Word(字典树/树上dp)
- 计蒜客 第2题:整除问题
- Android SQLite 显式事务控制优化插入数据
- RTP/RTCP协议介绍