Java讀取xml配置文件


package test.com;

import java.io.FileInputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class XmlParser {
    public static void main(String[] args) throws Exception {
        getXML("src/parameters.xml", "HolderName1");
        
        //readXmlFile("src/Accounts.xml");
    }

    /**
     * @desc 根據key屬性的值,獲取節點的值
     * 
     * 
     */
    public static String getXML(String sqlXMLPath, String node) throws Exception {

        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
        FileInputStream xmlInputStream = new FileInputStream(sqlXMLPath);
        DocumentBuilder builder = builderFactory.newDocumentBuilder();
        Document document = builder.parse(xmlInputStream);

        Node n = document.getChildNodes().item(0);
        NodeList nl = n.getChildNodes();

        for (int i = 0; i < nl.getLength(); i++) {
            if (!nl.item(i).getNodeName().equals("#text")) {
                Element e = (Element) nl.item(i);
                System.out.println(nl.item(i).getNodeName() + "\t" + e.getAttribute("key") + "\t" + nl.item(i).getTextContent());
                String key = e.getAttribute("key");
                String value = nl.item(i).getTextContent();
                if (key.equals(node)) {
                    return value;
                }
            }
        }
        return null;
    }

    public static void readXmlFile(String fileName) throws Exception {
        FileInputStream xmlInputStream = new FileInputStream(fileName);

        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); // 返回documentBuilderFactory對象
        DocumentBuilder db = dbf.newDocumentBuilder();// 返回db對象用documentBuilderFatory對象獲得返回documentBuildr對象
        Document dt = db.parse(xmlInputStream); // 得到一個DOM並返回給document對象
        Element element = dt.getDocumentElement();// 得到一個elment根元素
        System.out.println("根元素:" + element.getNodeName()); // 獲得根節點
        NodeList childNodes = element.getChildNodes(); // 獲得根元素下的子節點
        for (int i = 0; i < childNodes.getLength(); i++) // 遍歷這些子節點
        {
            Node node1 = childNodes.item(i); // childNodes.item(i);
            // 獲得每個對應位置i的結點
            if ("Account".equals(node1.getNodeName())) {
                // 如果節點的名稱為"Account",則輸出Account元素屬性type
                System.out.println("\r\n找到一個賬號. 所屬區域:s" + node1.getAttributes().getNamedItem("type").getNodeValue() + "$$");
                NodeList nodeDetail = node1.getChildNodes(); // 獲得<Accounts>下的節點
                for (int j = 0; j < nodeDetail.getLength(); j++) { // 遍歷<Accounts>下的節點
                    Node detail = nodeDetail.item(j); // 獲得<Accounts>元素每一個節點
                    if ("code".equals(detail.getNodeName())) // 輸出code
                        System.out.println("卡號: " + detail.getTextContent());
                    else if ("pass".equals(detail.getNodeName())) // 輸出pass
                        System.out.println("密碼: " + detail.getTextContent());
                    else if ("name".equals(detail.getNodeName())) // 輸出name
                        System.out.println("姓名: " + detail.getTextContent());
                    else if ("money".equals(detail.getNodeName())) // 輸出money
                        System.out.println("余額: " + detail.getTextContent());
                }
            }
        }

    }

}

 

 

 

 

 

<?xml version="1.0" encoding="UTF-8"?>

<parameters>
<parameter key="HolderName">測試</parameter>
<parameter key="save-holder">1</parameter>
<parameter key="HolderEmail">ceshi@ceshi.com</parameter>
<parameter key="HolderCardType">3</parameter>
<parameter key="HolderCardNo">asdasd</parameter>
<parameter key="HolderSex">1</parameter>
<parameter key="HolderMobile">13333333333</parameter>
</parameters>

 

<?xml version="1.0" encoding="UTF-8"?>
<Accounts>
<Account type="by0003">
<code>100001</code>
<pass>123</pass>
<name>李四</name>
<money>1000000.00</money>
</Account>
<Account type="hz0001">
<code>100002</code>
<pass>123</pass>
<name>張三</name>
<money>1000.00</money>
</Account>
</Accounts>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM