美文网首页Java 杂谈java后端技术
xml解析-获取指定节点下的值(SAXBuilder的使用)

xml解析-获取指定节点下的值(SAXBuilder的使用)

作者: 月中眠_d56d | 来源:发表于2019-07-24 14:06 被阅读0次

问题描述:

想要获取一个xml格式字符串指定节点下的值,要怎么实现?
这里应用SAXBuilder 类写了一个小的工具类,可以获取xml格式字符串指定节点下的值:

导包

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;

工具类

/**
     * @author wyl
     * @param result      xml格式的字符串
     * @param elementName 存储节点名的数组
     *                     (如果有多层级,用list封装,按照顺序,否则会查不到
     *                     例如 {elementName1,elementName2,elementName3} 这种格式,
     *                     注意:如果只有一层则list传null,如果root 下有多层,则从root下第二层开始将节点名add到list中
     * @param key         你要获取该层级的key值)
     * @return
     */
public static String getValueByKey(String result,List<String> elementList,String key){
        String value=null;
        try {
            //实例化SAXBuilder 对象
            SAXBuilder build = new SAXBuilder();
            //将xml格式的字符串result转化为Document 对象
            Document doc = build.build(new StringReader(result));
            //转化成element对象
            Element root = doc.getRootElement();
            Element element = null;
            if(elementList==null){//如果elementList传递为null,则直接获取root 对象的节点key的值
                value = root.getChild(key).getText();
            }else {//如果不为空,则循环获取elementList节点名的element 对象,并将获取的对象赋值给当前的root对象,以便于循环下一次的节点
                for (String rootName : elementName) {
                    element = root.getChild(rootName);
                    root=element;
                }
                //获取目标节点下的 key节点对应的值
                value = element.getChild(key).getText();
            }
        }catch (Exception e){
            e.printStackTrace();
        }
     return value;
    }

案例

例如xml格式的字符串为:

<?xml version="1.0" ?>
<root>
    <issuccess>T</issuccess>
    <code>0000</code>
    <message>本次交易成功</message>
    <servertime>2015-03-25 15:00:29.194</servertime>
    <RespData>
        <XJAcNo>3503018801</XJAcNo>                      
        <VirAcctNo>3503018801116</VirAcctNo>    
        <VirAcctName>虚账号开户测试</VirAcctName>  
        <RateYear></RateYear>       
        <RateStartDate></RateStartDate>
        <RateEndDate></RateEndDate>
        <MonType>01</MonType>           
        <test>
           <value1>这里是value1</value>
           <value2>这里是value2</value>
        </test>
    </RespData>
</root> 

1)如何通过工具类获取 XJAcNo 节点值

public static void main(String[] args){
    String result="上面的xml字符串";
    String XJAcNo = getValueByKey(result,null,"XJAcNo ");
    System.out.println("XJAcNo ="+XJAcNo );
}

2)如何通过工具类获取 test 节点下 value2 的值

public static void main(String[] args){
    String result="上面的xml字符串";
    List<String> list=new ArrayList<>();
    list.add("RespData");
    list.add("test");
    String value2 = getValueByKey(result,list,"value2 ");
    System.out.println("value2 ="+value2 );
}

亲测可用!如果有更好的方法,欢迎指正交流~~~

相关文章

网友评论

    本文标题:xml解析-获取指定节点下的值(SAXBuilder的使用)

    本文链接:https://www.haomeiwen.com/subject/silxrctx.html