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));  
    }  
  
}  

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

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

(0)
上一篇 2022年5月27日 下午1:00
下一篇 2022年5月27日 下午1:20


相关推荐

  • 树莓派3B安装ffmpeg[通俗易懂]

    树莓派3B安装ffmpeg[通俗易懂]树莓派3B安装ffmpeg树莓派型号:3b操作系统:ubuntu-mate-16.04.2-desktop-armhf-raspberry-pi.img如果只使用基础功能可以参考https://blog.csdn.net/qq_28877125/article/details/70186287用这里边的配置文件,编译起来的确比较快,十分钟内编译完成,但是,这个只包含了基础功能,我使…

    2022年6月25日
    30
  • java 转发与重定向_Java 转发和重定向的区别

    java 转发与重定向_Java 转发和重定向的区别转发是服务器行为,重定向是客户端行为1.转发在服务器端完成的;重定向是在客户端完成的2.转发的速度快;重定向速度慢3.转发的是同一次请求;重定向是两次不同请求4.转发不会执行转发后的代码;重定向会执行重定向之后的代码5.转发地址栏没有变化;重定向地址栏有变化6.转发必须是在同一台服务器下完成;重定向可以在不同的服务器下完成在servlet中调用转发、重定向的语句如下:request.getRequ…

    2025年9月6日
    10
  • winscp链接linux网络错误被决绝,解决了winscp连接不上的问题

    winscp链接linux网络错误被决绝,解决了winscp连接不上的问题在windows系统和虚拟机装的linux上互传文件时,可以用winscp。第一次用winscp时,老是连接不到linux上。但是两个系统都可以上网,还能ping通。还以为是端口22被什么进程占用。我的是windows2003的,虚拟机是redhatlinux9.0的。昨天下午又试试了,就解决这个问题啦。2.把linux里的防火墙给关了。步骤:在终端输入setup,在防火墙选择处,选择“无防…

    2025年11月22日
    6
  • 动态链接库(DLL)初始化例程失败问题

    动态链接库(DLL)初始化例程失败问题之前做项目传到服务器上碰到下面的问题但是在本地 VS 中运行又没问题后经上网搜索发现只要在 web config 文件中加入如下代码即可解决 lt system net gt nbsp nbsp nbsp lt defaultProxy gt nbsp nbsp nbsp nbsp nbsp nbsp nbsp lt proxyusesyst False gt nbsp nbsp nbsp lt defaultProxy gt lt syst

    2026年3月26日
    6
  • 什么是SOA架构?为什么使用SOA架构?「建议收藏」

    什么是SOA架构?为什么使用SOA架构?「建议收藏」SOA架构简介面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种这样的系统中的服务可以以一种统一和通用的方式进行交互**SOA具有以下五个特征**1.可重用;2.松耦合;3.明确定义的接口;…

    2022年6月24日
    32
  • vue分页功能实现_vue登录功能

    vue分页功能实现_vue登录功能vue分页功能

    2026年4月15日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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