java中獲取xml文件的某個(gè)配置節(jié)點(diǎn)內(nèi)容方式
java獲取xml文件的某個(gè)配置節(jié)點(diǎn)內(nèi)容
如果想要直接獲取webconfig.xml里面某個(gè)配置文件的節(jié)點(diǎn)的內(nèi)容,如何優(yōu)雅的實(shí)現(xiàn)?
例如有個(gè)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對(duì)象
?? ?private WebappConfigUtil() {
?? ??? ?SAXReader reader = new SAXReader();//創(chuàng)建一個(gè)讀取xml文件的對(duì)象
?? ??? ?try {
?? ??? ??? ?configDocument = reader.read(WebappConfigUtil.class
?? ??? ??? ??? ??? ?.getResourceAsStream(CONFIG_FILE_NAME));//括號(hào)內(nèi):查找具有給定名稱的資源 括號(hào)外:得到document對(duì)象
?? ??? ?} catch (DocumentException exp) {
?? ??? ??? ?configDocument = DocumentHelper.createDocument();
?? ??? ??? ?configDocument.addElement("webapp-configs");
?? ??? ?}
?? ?}
?? ?public static String getParameter(String name) {
?? ??? ?//讀取wabapp-config.xml的字符串(大標(biāo)簽套小標(biāo)簽)
?? ??? ?String xpath = "/webapp-configs/param[@name='" + name + "']/@value";
?? ??? ?Node node = instance.configDocument.selectSingleNode(xpath);//找到節(jié)點(diǎn)
?? ??? ?if (node == null) {
?? ??? ??? ?return "";
?? ??? ?}
?? ??? ?return node.getText();
?? ?}
?? ?public static void main(String[] args){
?? ??? ?System.out.println(WebappConfigUtil.getParameter("PORT"));
?? ?}
}如果想獲取參數(shù)為name的所有節(jié)點(diǎn)的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根據(jù)xml節(jié)點(diǎn)地址獲取指定節(jié)點(diǎn)內(nèi)容
備好幾個(gè)前同事問過怎么獲取xml指定節(jié)點(diǎn)內(nèi)容后,終于決定寫個(gè)工具類
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指定節(jié)點(diǎn)內(nèi)容
* @param xml xml內(nèi)容
* @param attrName 節(jié)點(diǎn)名稱(例如: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格式字符串轉(zhuǎn)化為DOM對(duì)象
Document document = DocumentHelper.parseText(xml);
// 獲取根結(jié)點(diǎn)對(duì)象
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;
}
}測(cè)試代碼
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>中國(guó)農(nóng)業(yè)銀行</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);
}測(cè)試結(jié)果輸出

另外,如果要獲取xml節(jié)點(diǎn)得值可以修改代碼,
Element.getText()、Element.getStringValue()都可以獲取xml節(jié)點(diǎn)值
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
淺談spring和spring MVC的區(qū)別與關(guān)系
下面小編就為大家?guī)硪黄獪\談spring和spring MVC的區(qū)別與關(guān)系。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-04-04
java中Iterator和ListIterator實(shí)例詳解
這篇文章主要介紹了java中Iterator和ListIterator實(shí)例詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12
詳解使用spring boot admin監(jiān)控spring cloud應(yīng)用程序
本篇文章主要介紹了詳解使用spring boot admin監(jiān)控spring cloud應(yīng)用程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11
java實(shí)現(xiàn)ATM機(jī)系統(tǒng)(2.0版)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)ATM機(jī)系統(tǒng)2.0版,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-03-03
spring入門教程之bean的繼承與自動(dòng)裝配詳解
眾所周知Spring里面的bean就類似是定義的一個(gè)組件,而這個(gè)組件的作用就是實(shí)現(xiàn)某個(gè)功能的,下面這篇文章主要給大家介紹了關(guān)于spring入門教程之bean繼承與自動(dòng)裝配的相關(guān)資料,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-11-11
java實(shí)現(xiàn)頁(yè)面多查詢條件必選的統(tǒng)一處理思路
這篇文章主要為大家介紹了java實(shí)現(xiàn)頁(yè)面多查詢條件必選的統(tǒng)一處理思路詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
SpringBoot靜態(tài)方法調(diào)用Spring容器bean的三種解決方案
在SpringBoot中靜態(tài)方法調(diào)用Spring容器bean時(shí)出現(xiàn)的null值問題,本文就來介紹一下SpringBoot靜態(tài)方法調(diào)用Spring容器bean的三種解決方案,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01
模擬Spring的簡(jiǎn)單實(shí)現(xiàn)
本文的主要內(nèi)容就是學(xué)習(xí)Spring的開端,模擬一下Spring的實(shí)現(xiàn),感興趣的小伙伴可以參考一下2015-10-10

