JAVA解析XML格式字符串「建议收藏」

JAVA解析XML格式字符串「建议收藏」importjava.io.IOException;importjava.io.StringReader;importjava.util.List;importorg.jdom.Document;importorg.jdom.Element;importorg.jdom.JDOMException;importorg.jdom.Namespace;im

大家好,又见面了,我是你们的朋友全栈君。

这里写到两种xml解析方法。分别针对字符串类型的xml和文件类型的xml。

第一种:对xml字符串进行解析

import java.io.IOException;
import java.io.StringReader;
import java.util.List;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.Namespace;
import org.jdom.input.SAXBuilder;
import org.xml.sax.InputSource;

public class DuXMLDoc {
    public List xmlElements(String xmlDoc) {
        if (xmlDoc!=null && !xmlDoc.equals("")) {
            Pattern p = Pattern.compile("\r|\n");
            Matcher m = p.matcher(xmlDoc);
            xmlDoc = m.replaceAll("");
        }//创建一个新的字符串
        StringReader read = new StringReader(xmlDoc);
        //创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入
        InputSource source = new InputSource(read);
        //创建一个新的SAXBuilder
        SAXBuilder sb = new SAXBuilder();
        try {
            //通过输入源构造一个Document
            Document doc = sb.build(source);
            //取的根元素
            Element root = doc.getRootElement();
            System.out.println(root.getName());//输出根元素的名称(测试)
            //得到根元素所有子元素的集合
            List jiedian = root.getChildren();
            //获得XML中的命名空间(XML中未定义可不写)
            Namespace ns = root.getNamespace();
            Element et = null;
            for(int i=0;i<jiedian.size();i++){
                et = (Element) jiedian.get(i);//循环依次得到子元素
               
                System.out.println(et.getChild("users_id",ns).getText());
                System.out.println(et.getChild("users_address",ns).getText());
            }
           
            et = (Element) jiedian.get(0);
            List zjiedian = et.getChildren();
            for(int j=0;j<zjiedian.size();j++){
                Element xet = (Element) zjiedian.get(j);
                System.out.println(xet.getName());
            }
        } catch (JDOMException e) {
            // TODO 自动生成 catch 块
            e.printStackTrace();
        } catch (IOException e) {
            // TODO 自动生成 catch 块
            e.printStackTrace();
        }
        return null;
    }
    public static void main(String[] args){
        DuXMLDoc doc = new DuXMLDoc();
        String xml = "<?xml version=\"1.0\" encoding=\"gb2312\"?>"+
        "<Result xmlns=\"http://www.fiorano.com/fesb/activity/DBQueryOnInput2/Out\">"+
           "<row resultcount=\"1\">"+
              "<users_id>1001     </users_id>"+
              "<users_name>wangwei   </users_name>"+
              "<users_group>80        </users_group>"+
              "<users_address>1001号   </users_address>"+
           "</row>"+
           "<row resultcount=\"1\">"+
              "<users_id>1002     </users_id>"+
              "<users_name>wangwei   </users_name>"+
              "<users_group>80        </users_group>"+
              "<users_address>1002号   </users_address>"+
           "</row>"+
        "</Result>";
        doc.xmlElements(xml);
    }
}

}

第二种:对xml文件进行解析

package com.zuidaima.xml;  
  
import java.io.FileInputStream;  
import java.io.FileNotFoundException;  
import java.io.IOException;  
import java.util.List;  
  
import org.jdom.Document;  
import org.jdom.Element;  
import org.jdom.JDOMException;  
import org.jdom.input.SAXBuilder;  
  
/******************************************************************************* 
 * xml通用工具类 
 * @author www.zuidaima.com 
 */  
@SuppressWarnings("unchecked")  
public class XMLUtils  
{  
    public static String xml = "";  
  
    public static void init()  
    {  
        xml = "";  
    }  
  
    /*************************************************************************** 
     * 得到指定名称节点下的所有文本内容,包括节点(逆归) <暂不考虑节点属性情况> 
     *  
     * @param doc 
     *            xml文档对象 
     * @param e 
     *            要获取的节点对象 
     * @param exceptTag 
     *            要排除的节点名称 
     * @return 
     */  
  
    public static String getChildAllText(Document doc, Element e)  
    {  
        if (e != null)  
        {  
            if (e.getChildren() != null)  
            {  
                List<Element> list = e.getChildren();  
                xml += "<" + e.getName() + ">";  
                for (Element el : list)  
                {  
                    if(el.getChildren().size() > 0)  
                    {  
                        getChildAllText(doc, el);  
                    }  
                    else  
                    {  
                            xml += "<" + el.getName() + ">" + el.getTextTrim() + "</"  
                                    + el.getName() + ">";  
                    }  
                }  
                xml += "</" + e.getName() + ">" ;  
            }  
            else  
            {  
                    xml += "<" + e.getName() + ">" + e.getTextTrim() + "</"  
                            + e.getName() + ">";  
            }  
        }  
        return xml;  
    }  
  
    public static void main(String[] args) throws FileNotFoundException,  
            JDOMException, IOException  
    { // 如果有任何异常则抛出  
        SAXBuilder sb = new SAXBuilder(); // 新建立构造器  
        Document doc = null;  
        doc = sb  
                .build(new FileInputStream(  
                        "D:\\test.xml")); // 读入6.xml  
        Element root = doc.getRootElement(); // 取得根节点  
        // Element e = root.getChild("apptype1");  
  
        // System.out.println(e);  
        System.out.println(getChildAllText(doc, root));  
    }  
  
}  

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/140692.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Observability:运用 Fleet 来轻松地导入 Nginx 日志及指标

    Observability:运用 Fleet 来轻松地导入 Nginx 日志及指标在我之前的文章: Observability:使用ElasticAgent和IngestManager简化数据导入(一) Observability:使用ElasticAgent和IngestManager简化数据导入(二) 我有讲到如何使用IngestManager简化数据输入。今天我重新看了一下界面确实变了很多,这就是为什么实验版本的功能一直在演化中。在今天的文章中,我将基于7.13的版本如何使用Fleet导入Nginx日志。..

  • Windows Azure Platform Introduction (3) 云计算的特点

    Windows Azure Platform Introduction (3) 云计算的特点

  • 数据库的三大范式[通俗易懂]

    数据库的三大范式[通俗易懂]当你应聘后端岗位的时候,数据库的知识必不可少,今天给大家分享一下数据库三大范式的通俗理解第一范式:无重复的列第二范式:属性完全依赖于主键第三范式:属性不依赖于其他非主属性总结:第一范式(1NF)原子性:保证数据不可再分第二范式(2NF)前提:满足第一范式每张表只描述一件事情,就是主键对应着所有信息第三范式(3NF)前提:满足第一和第二范式第三范式需要保证表中的数据和主键直接相关,而不是间接相关注意:阿里巴巴要求关联查询的表不得超过3张,数据库的性能更加重要,适当考虑规范性就好其实目前关系数据库有六种范式:

  • 基于spss的聚类分析(Cluster analysis)「建议收藏」

    基于spss的聚类分析(Cluster analysis)「建议收藏」聚类分析是统计学中研究这种“物以类聚”问题的一种有效方法,它属于统计分析的范畴。聚类分析的实质是建立一种分类方法,它能够将一批样本数据按照他们在性质上的亲密程度在没有先验知识的情况下自动进行分类。这里所说的类就是一个具有相似性的个体的集合,不同类之间具有明显的区别。定义:聚类分析是一种探索性的分析,在分类的过程中,人们不必事先给出一个分类的标准,聚类分析能够从样本数据出发,自动进行分类。聚类分析所使用方法的不同,常常会得到不同的结论。不同研究者对于同一组数据进行聚类分析,所得到的聚类数.

    2022年10月17日
  • 冒泡排序法_GUI斗地主小游戏源码java

    冒泡排序法_GUI斗地主小游戏源码java看图秒懂代码!

    2022年10月21日
  • pytest fixtures_pytest allure

    pytest fixtures_pytest allurefixture的优势Pytest的fixture相对于传统的xUnit的setup/teardown函数做了显著的改进:命名方式灵活,不局限于setup和teardown这几个命名conf

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号