`

java对xml文件的解析(存在特殊文字和父子节点同名)

    博客分类:
  • java
 
阅读更多

1.存在特殊字符请参考:http://blog.csdn.net/zhutulang/article/details/37736407

2.父子节点同名可以通过count计数的方式避免,具体代码如下:

public  static void main(String [] args){
	     
		 
	     try {  
	            FileInputStream input = new FileInputStream(tmpFileStr+"/"+"farfetch.xml");  
	            List<HashMap<String, String>> list = _readXml(input, "product");
	            
        	    String starttime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
	    		System.out.println("---"+starttime+"--------Farfetch开始更新-----------");

 

 public static List<HashMap<String, String>> _readXml(InputStream input, String nodeName){  
	        try {  
	            SAXParserFactory spf = SAXParserFactory.newInstance();  
	            SAXParser parser = spf.newSAXParser();  
	            SaxHandler handler = new SaxHandler(nodeName);  
	            parser.parse(input, handler);
	            input.close();  
	            return handler.getList();  
	        } catch (ParserConfigurationException e) {  
	            e.printStackTrace();  
	        } catch (SAXException e) {  
	            e.printStackTrace();  
	        } catch (IOException e) {  
	            e.printStackTrace();  
	        }  
	        return null;  
	    }  

 核心代码:

package tools;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;




public class SaxHandler extends DefaultHandler {
   
	 private HashMap<String, String> map = null;  
	    private List<HashMap<String, String>> list = null;  
	    /** 
	     * 正在解析的元素的标签 
	     */  
	    private String currentTag = null;  
	    /** 
	     * 正在解析的元素的值 
	     */  
	    private String currentValue = null;  
	    private String nodeName = null;  
	    
	    //计算第几次进入结束标签,避免两个同名porduct出问题
	    int count =0;
	    //对于含有特殊字符的URL解析时进行拼接
	    StringBuilder sb = new StringBuilder();  
	    
	    public List<HashMap<String, String>> getList(){  
	        return list;  
	    }  
	  
	    public SaxHandler(String nodeName) {  
	        this.nodeName = nodeName;  
	    }  
	  
	    @Override  
	    public void startDocument() throws SAXException {  
	        // TODO 当读到一个开始标签的时候,会触发这个方法  
	        list = new ArrayList<HashMap<String,String>>();  
	    }  
	  
	    @Override  
	    public void startElement(String uri, String localName, String name,  
	            Attributes attributes) throws SAXException {  
	        // TODO 当遇到文档的开头的时候,调用这个方法  
	    	sb.setLength(0);
	    	
	        if(name.equals(nodeName) && map == null){  
	            map = new HashMap<String, String>();  
	        }
	        
	        /****对两个相同的属性名进行特殊处理 start*****/
	        if("discount".equals(name)){
	        	map.put("discount_currency", attributes.getValue("currency"));
	        	attributes = null;
	        }
	        if("price".equals(name)){
	        	map.put("price_currency", attributes.getValue("currency"));
	        	attributes = null;
	        }
	        /****对两个相同的属性名进行特殊处理 end*****/
	        
	        if(attributes != null && map != null){  
	            for(int i = 0; i < attributes.getLength();i++){  
	                map.put(attributes.getQName(i), attributes.getValue(i));  
	            }  
	        }  
	        currentTag = name;  
	    }  
	      
	    @Override  
	    public void characters(char[] ch, int start, int length)  
	            throws SAXException {  
	        // TODO 这个方法用来处理在XML文件中读到的内容  
	    	System.out.println("characters()");
	        if(currentTag != null && map != null){  
	            currentValue = new String(ch, start, length);  
	            if(currentValue != null && !currentValue.trim().equals("") && !currentValue.trim().endsWith("\n")){  
	            	sb.append(currentValue);
	                map.put(currentTag, sb.toString());  
	            }  
	        }  
//	        currentTag=null;  
//	        currentValue=null;  
	    }  
	  
	    @Override  
	    public void endElement(String uri, String localName, String name)  
	            throws SAXException {  
	        // TODO 在遇到结束标签的时候,调用这个方法  
	    	System.out.println("endElement()");
	        if(name.equals(nodeName)){  
			    if (count > 0) {
			    	list.add(map);
			    	map = null;
			    	count = 0;
			    }
	            count++;
	        }  
	        currentTag = null;
	        currentValue=null;
	        super.endElement(uri, localName, name);  
	    }  
}

 xml文件具体内容如下:

<?xml version="1.0" encoding="utf-8"?>

<merchandiser xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="merchandiser.xsd">
  <header>
    <merchantId>37938</merchantId>
    <merchantName>FARFETCH.COM Australia</merchantName>
    <createdOn>12/05/2015 07:22:29</createdOn>
  </header>  
  <product product_id="10100630" name="WERKSTATT:MÜNCHEN leather belt" sku_number="10100630" manufacturer_name="WERKSTATT:MÜNCHEN">
    <category>
      <primary>Accessories</primary>
      <secondary>Belts</secondary>
    </category>
    <URL>
      <product>http://click.linksynergy.com/link?id=DGme2yum/2Y&amp;offerid=389625.10100630&amp;type=15&amp;murl=http%3A%2F%2Fwww.farfetch.com%2Fshopping%2Fmen%2Fitem10100630.aspx</product>
      <productImage>http://cdn-images.farfetch.com/10/10/06/30/10100630_579509_800.jpg</productImage>
    </URL>
    <description>
      <short>Black leather belt from Werkstatt: Munchen featuring a silver buckle and silver loop.</short>
    </description>
    <discount currency="AUD">
      <type>amount</type>
    </discount>
    <price currency="AUD">
      <retail>1265.42</retail>
    </price>
    <brand>WERKSTATT:MÜNCHEN</brand>
    <shipping>
      <availability>in-stock</availability>
    </shipping>
    <pixel>http://ad.linksynergy.com/fs-bin/show?id=DGme2yum/2Y&amp;bids=389625.10100630&amp;type=15&amp;subid=0</pixel>
    <attributeClass class_id="60">
      <Product_Type>Accessories</Product_Type>
      <Size>S</Size>
      <Color>Black</Color>
      <Gender>Male</Gender>
    </attributeClass>
  </product>  
  <product product_id="10100676" name="WERKSTATT:MÜNCHEN leather belt" sku_number="10100676" manufacturer_name="WERKSTATT:MÜNCHEN">
    <category>
      <primary>Accessories</primary>
      <secondary>Belts</secondary>
    </category>
    <URL>
      <product>http://click.linksynergy.com/link?id=DGme2yum/2Y&amp;offerid=389625.10100676&amp;type=15&amp;murl=http%3A%2F%2Fwww.farfetch.com%2Fshopping%2Fmen%2Fitem10100676.aspx</product>
      <productImage>http://cdn-images.farfetch.com/10/10/06/76/10100676_579578_800.jpg</productImage>
    </URL>
    <description>
      <short>Black leather belt from Werkstatt: Munchen featuring a silver buckle and leather loop.</short>
    </description>
    <discount currency="AUD">
      <type>amount</type>
    </discount>
    <price currency="AUD">
      <retail>1539.03</retail>
    </price>
    <brand>WERKSTATT:MÜNCHEN</brand>
    <shipping>
      <availability>in-stock</availability>
    </shipping>
    <pixel>http://ad.linksynergy.com/fs-bin/show?id=DGme2yum/2Y&amp;bids=389625.10100676&amp;type=15&amp;subid=0</pixel>
    <attributeClass class_id="60">
      <Product_Type>Accessories</Product_Type>
      <Size>S-M-L-XL</Size>
      <Color>Black</Color>
      <Gender>Male</Gender>
    </attributeClass>
  </product>  
  <product product_id="10212594" name="SCUNZANI IVO toad skin belt" sku_number="10212594" manufacturer_name="SCUNZANI IVO">
    <category>
      <primary>Accessories</primary>
      <secondary>Belts</secondary>
    </category>
    <URL>
      <product>http://click.linksynergy.com/link?id=DGme2yum/2Y&amp;offerid=389625.10212594&amp;type=15&amp;murl=http%3A%2F%2Fwww.farfetch.com%2Fshopping%2Fmen%2Fitem10212594.aspx</product>
      <productImage>http://cdn-images.farfetch.com/10/21/25/94/10212594_1130649_800.jpg</productImage>
    </URL>
    <description>
      <short>Green and black toad skin belt from Scunzani Ivo featuring a silver-tone buckle. Please note that this item cannot be shipped outside the E.U.</short>
    </description>
    <discount currency="AUD">
      <type>amount</type>
    </discount>
    <price currency="AUD">
      <retail>461.25</retail>
    </price>
    <brand>SCUNZANI IVO</brand>
    <shipping>
      <availability>in-stock</availability>
    </shipping>
    <pixel>http://ad.linksynergy.com/fs-bin/show?id=DGme2yum/2Y&amp;bids=389625.10212594&amp;type=15&amp;subid=0</pixel>
    <attributeClass class_id="60">
      <Product_Type>Accessories</Product_Type>
      <Size>M-L</Size>
      <Color>Green</Color>
      <Gender>Male</Gender>
    </attributeClass>
  </product>  
  <product product_id="11249583" name="JIL SANDER VINTAGE straight leg trousers" sku_number="11249583" manufacturer_name="JIL SANDER VINTAGE">
    <category>
      <primary>Vintage &amp; Archive</primary>
      <secondary>Trousers</secondary>
    </category>
    <URL>
      <product>http://click.linksynergy.com/link?id=DGme2yum/2Y&amp;offerid=389625.11249583&amp;type=15&amp;murl=http%3A%2F%2Fwww.farfetch.com%2Fshopping%2Fwomen%2Fitem11249583.aspx</product>
      <productImage>http://cdn-images.farfetch.com/11/24/95/83/11249583_6003611_800.jpg</productImage>
    </URL>
    <description>
      <short>Sky grey linen-wool blend straight leg trousers from Jil Sander Vintage featuring a button and zip fly, side pockets and a back pocket. Circa 1990. Please note that vintage items are not new and therefore might have minor imperfections.</short>
    </description>
    <discount currency="AUD">
      <type>amount</type>
    </discount>
    <price currency="AUD">
      <retail>189.77</retail>
    </price>
    <brand>JIL SANDER VINTAGE</brand>
    <shipping>
      <availability>in-stock</availability>
    </shipping>
    <pixel>http://ad.linksynergy.com/fs-bin/show?id=DGme2yum/2Y&amp;bids=389625.11249583&amp;type=15&amp;subid=0</pixel>
    <attributeClass class_id="60">
      <Product_Type>Vintage &amp; Archive</Product_Type>
      <Size>36</Size>
      <Color>Grey</Color>
      <Gender>Female</Gender>
    </attributeClass>
  </product>  
  <trailer>
    <numberOfProducts>118204</numberOfProducts>
  </trailer>
</merchandiser>

 

 

分享到:
评论

相关推荐

    在javascript中对于DOM的加强

    在DOM树中,节点之间存在特定的父子、兄弟关系。整个HTML文档就是一个文档节点,它是DOM树的根节点。每个HTML标签对应一个元素节点,而元素节点内可以包含其他元素节点、文本节点或属性节点,这些是子节点。同一父...

    Maven的下载、安装、配置与使用教程.docx

    - **打开或创建`settings.xml`文件**:确保您的系统中存在`settings.xml`文件,如果不存在,则需要在Maven安装目录下创建一个同名文件。 - **配置代理服务器信息**:在`settings.xml`文件中,找到`&lt;proxies&gt;`节点...

    ASP.NET公文管理系统的设计与实现(源代码+论文).zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REaDME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

    Java实现:图书管理系统,附完整代码

    Java实现:图书管理系统,附完整代码

    深圳市数字政府建设研究报告.pdf

    深圳市数字政府建设研究报告.pdf

    单片机项目:从构思到实现的全面探索

    单片机项目:从构思到实现的全面探索

    ASP基于WEB在线教育系统(源代码+论文+任务书).zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、资源1项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

    基于SSH的仿天猫商城.zip(毕设&课设&实训&大作业&竞赛&项目)

    项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。

    基于java的班主任助理系统的设计与实现.docx

    基于java的班主任助理系统的设计与实现.docx

    基于java的少儿编程网上报名系统设计与实现.docx

    基于java的少儿编程网上报名系统设计与实现.docx

    基于java的精品酒销售管理系统设计与实现.docx

    基于java的精品酒销售管理系统设计与实现.docx

    哈工大密码学.zip(毕设&课设&实训&大作业&竞赛&项目)

    项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。

    mysql理论知识,索引,锁等知识点的概述

    mysql理论知识,索引,锁等知识点的概述

    软工课程设计:进销存系统客户端.zip(课设&实训&大作业&项目)

    项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用

    #_ssm_097_mysql_高速公路收费系统_.zip

    均包含代码,文章,部分项目包含ppt

    健身房预约课程小程序(源码).zip

    健身房预约课程小程序(源码).zip

    软件自动定时启动器-添加可执行文件软件,设置启动的时间,也可以设置关闭的时间-供大家学习研究参考

    点击添加软件,可以添加可执行文件软件,设置启动的时间,也可以设置关闭的时间 注意,时间为00:00:00 等于没设置,这个时间不在设置范围,其他任何时间都可以 1.1更新 1:修复,设置的软件启动时间无法保存到配置文件 2:修复,设置的软件启动时间软件启动自动加载 3:修复,设置跨天,可能出现,无法执行的问题。

    华为OLT遇到GPON ONU匹配状态为不匹配处理方法说明书

    华为OLT遇到GPON ONU匹配状态为不匹配处理方法说明书

    ASP.NET报名管理信息系统(源代码+论文+开题报告+任务).zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

    ASP.NET+SQL通用作业批改系统设计(源代码+论文).zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

Global site tag (gtag.js) - Google Analytics