sax+dom解析超大文件

File file = new File("data.xml"); 
SAXParserFactory.newInstance().newSAXParser().parse(file, new DefaultHandler(){
    StringBuilder sb = new StringBuilder();
    public void startElement (String uri, String localName,
            String qName, Attributes attributes) throws SAXException
    {
        if(qName.equals("item")){
            sb = new StringBuilder();
        }
        sb.append("<");
        sb.append(qName);
        if(null != attributes){
            for (int i = 0; i < attributes.getLength(); i++) {
                sb.append(" ");
                sb.append(attributes.getQName(i));
                sb.append("=");
                sb.append("\"");
                sb.append(cdata(attributes.getValue(i)));//属性值特殊字符转换
                sb.append("\"");
            }
        }
        sb.append(">");
    }
    public void endElement (String uri, String localName, String qName) throws SAXException
    {
        sb.append("</" + qName + ">");
        if(qName.equals("item")){
            return;
        }
        //item节点结束,取得完整的节点xml使用dom方法解析
        parseByDom(sb.toString());
    }
    public void characters (char ch[], int start, int length) throws SAXException
    {   //节点内容不转换特殊字符
        String content = new String(ch, start, length);
        if(StringUtils.isNotBlank(content)){
            sb.append("<![CDATA[");
            sb.append(content);
            sb.append("]]>");
        }
    }
    /**通过DOM解析*/
    public void parseByDom(String nodeXML){
        //TODO:DocumentBuilderFactory.newInstance().newDocumentBuilder().parse
    }
    public String cdata(String text) {
        return text.replaceAll("&", "&amp;")
                   .replaceAll("'", "&apos;").replaceAll("\"", "&quot;")
                   .replaceAll(">", "&gt;").replaceAll("<", "&lt;");
    }
});


转载于:https://my.oschina.net/h2do/blog/599832

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值