java中获取xml文件的某个配置节点内容方式

 更新时间:2023年06月17日 10:19:04   作者:我不想成秃头  
这篇文章主要介绍了java中获取xml文件的某个配置节点内容方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

java获取xml文件的某个配置节点内容

如果想要直接获取webconfig.xml里面某个配置文件的节点的内容,如何优雅的实现?

例如有个xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<webapp-configs>
    <param name="IP" value="127.0.0.1"/>
    <param name="PORT" value="8070"/>
</webapp-configs>

如何获取PORT的value是多少呢?

下面是代码:

public class WebappConfigUtil {
    private final static String CONFIG_FILE_NAME = "/webapp-config.xml";
    private Document configDocument;
    private static WebappConfigUtil instance = new WebappConfigUtil();//得到配置文件的document对象
    private WebappConfigUtil() {
        SAXReader reader = new SAXReader();//创建一个读取xml文件的对象
        try {
            configDocument = reader.read(WebappConfigUtil.class
                    .getResourceAsStream(CONFIG_FILE_NAME));//括号内:查找具有给定名称的资源 括号外:得到document对象
        } catch (DocumentException exp) {
            configDocument = DocumentHelper.createDocument();
            configDocument.addElement("webapp-configs");
        }
    }
    public static String getParameter(String name) {
        //读取wabapp-config.xml的字符串(大标签套小标签)
        String xpath = "/webapp-configs/param[@name='" + name + "']/@value";
        Node node = instance.configDocument.selectSingleNode(xpath);//找到节点
        if (node == null) {
            return "";
        }
        return node.getText();
    }
    public static void main(String[] args){
        System.out.println(WebappConfigUtil.getParameter("PORT"));
    }
}

如果想获取参数为name的所有节点的list,那么

    public static List<String> getParameterList(String name) {
        String xpath = "/webapp-configs/param[@name='" + name + "']/list/value";
        List<?> nodes = instance.configDocument.selectNodes(xpath);
        List<String> values = new ArrayList<String>();
        for (Iterator<?> iter = nodes.iterator(); iter.hasNext();) {
            Node node = (Node) iter.next();
            values.add(node.getText());
        }
        return values;
    }

java根据xml节点地址获取指定节点内容

备好几个前同事问过怎么获取xml指定节点内容后,终于决定写个工具类

maven依赖包 

        <dependency>
			<groupId>dom4j</groupId>
			<artifactId>dom4j</artifactId>
			<version>1.6.1</version>
		</dependency>

XmlUtil

import java.util.*;
import java.util.stream.Collectors;
import org.dom4j.*;
public class XmlUtil {
    /**
     * 获取XML指定节点内容
     * @param xml xml内容
     * @param attrName 节点名称(例如:TranData.OutputData.Result)
     * @return
     * @throws Exception
     */
    public static String getXmlAttrValue(String xml,String attrName) throws Exception {
        if (null==xml||xml.equals("")||null==attrName||attrName.equals("")){
            return null;
        }
        String[] attrs = attrName.split("\\.");
        int length = attrs.length;
        String result = null;
        // 将xml格式字符串转化为DOM对象
        Document document = DocumentHelper.parseText(xml);
        // 获取根结点对象
        Element element = document.getRootElement();
        List<Element> elements = Arrays.asList(element);
        for (int i = 0; i < length; i++) {
            Map<String,Element> elementMap = elements.stream().collect(Collectors.toMap(e->e.getName(),e->e));
            if (elementMap.containsKey(attrs[i])){
                if (i==length-1){
                    result = elementMap.get(attrs[i]).asXML();
                    break;
                }else {
                    elements = elementMap.get(attrs[i]).elements();
                }
            }else {
                throw new Exception("Node does not exist:"+attrName);
            }
        }
        return result;
    }
}

测试代码

    public static void main(String[] args) throws Exception {
        String xml = "<?xml version=\"1.0\" encoding=\"GBK\"?>\n" +
                "<TranData>\n" +
                "    <ClientInfo>\n" +
                "        <resultCode>0</resultCode>\n" +
                "        <resultMsg>查询成功</resultMsg>\n" +
                "        <transDate>2023-08-30</transDate>\n" +
                "    </ClientInfo>\n" +
                "    <InputData>\n" +
                "        <PolicyNum>321052800581541</PolicyNum>\n" +
                "    </InputData>\n" +
                "    <OutputData>\n" +
                "        <Result>\n" +
                "            <SubPolBackFee>111.52</SubPolBackFee>\n" +
                "            <InceptContValue>0</InceptContValue>\n" +
                "            <OtherDeduct>1430.48</OtherDeduct>\n" +
                "            <AccountChg>0</AccountChg>\n" +
                "            <CashValue>1542.00</CashValue>\n" +
                "            <BankCode>103</BankCode>\n" +
                "            <BankCodeName>中国农业银行</BankCodeName>\n" +
                "            <BankAccNo>6228480320236711910</BankAccNo>\n" +
                "            <AccName>快快快</AccName>\n" +
                "            <SumPrem>1542</SumPrem>\n" +
                "            <SumAmnt>100000</SumAmnt>\n" +
                "            <PayCount>1</PayCount>\n" +
                "            <LiveInsuaccMoney>0.0</LiveInsuaccMoney>\n" +
                "            <BonusInsuaccMoney>0.0</BonusInsuaccMoney>\n" +
                "            <LoanAmnt></LoanAmnt>\n" +
                "            <LoanInterest></LoanInterest>\n" +
                "        </Result>\n" +
                "    </OutputData>\n" +
                "</TranData>\n";
        String result = getXmlAttrValue(xml,"TranData.OutputData.Result.BankCodeName");
        System.out.println(result);
    }

测试结果输出

另外,如果要获取xml节点得值可以修改代码,

Element.getText()、Element.getStringValue()都可以获取xml节点值

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java Synchronized的使用详解

    Java Synchronized的使用详解

    这篇文章主要介绍了Java Synchronized的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Java List排序4种写法整理

    Java List排序4种写法整理

    这篇文章主要给大家介绍了关于Java List排序4种写法整理的相关资料,在有的时候我们会需要对List进行排序,在Java中如何实现呢,本文记录一下Java中对List的几种排序方式,需要的朋友可以参考下
    2023-08-08
  • 关于webLucene 安装方法

    关于webLucene 安装方法

    webLucene是一个基于开源项目lucene实现站内搜索的工具,关于它的安装,百度得到的大多是一样的,按照步骤也能正确安装并运行,需要注意的问题是
    2009-06-06
  • spring-boot-maven-plugin引入出现爆红(已解决)

    spring-boot-maven-plugin引入出现爆红(已解决)

    这篇文章主要介绍了spring-boot-maven-plugin引入出现爆红(已解决),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • IDEA搭建SpringBoot多模块聚合工程过程详解(多模块聚合工程)

    IDEA搭建SpringBoot多模块聚合工程过程详解(多模块聚合工程)

    这篇文章主要是介绍一下,如何在IDEA开发工具下,搭建一个基于SpringBoot的多模块聚合工程项目,本篇文章,将项目模块细分为几个子工程模块,在文中给大家详细介绍过,对IDEA搭建SpringBoot多模块聚合工程感兴趣的朋友一起看看吧
    2022-04-04
  • Java项目打包发布到maven私仓常见的几种方式

    Java项目打包发布到maven私仓常见的几种方式

    这篇文章主要介绍了项目打包发布到maven私仓常见的几种方式,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下
    2021-03-03
  • jbuilder2006连接sqlserver2000的方法

    jbuilder2006连接sqlserver2000的方法

    xp jbuiler2006 连接SQL SERVER2000的问题
    2008-10-10
  • 浅谈Java编程ToString()方法重写的意义

    浅谈Java编程ToString()方法重写的意义

    这篇文章主要介绍了浅谈Java编程ToString()方法重写的意义,还是挺不错的,这里分享给大家,供朋友们学习和参考。
    2017-10-10
  • SpringBoot配置log4j2的实现示例

    SpringBoot配置log4j2的实现示例

    SpringBoot中默认使用Logback作为日志框架,本文主要介绍了SpringBoot配置log4j2的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • Java基数排序radix sort原理及用法解析

    Java基数排序radix sort原理及用法解析

    这篇文章主要介绍了Java基数排序radix sort原理及用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06

最新评论