问题描述:
想要获取一个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 );
}
亲测可用!如果有更好的方法,欢迎指正交流~~~
网友评论