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>
