使用 JDK 自带的dom 操作XML

  需要导入的默认的dom 类

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; 

 

/**解析本地xml(响应) 文件 格式 见定义*/ public static PosSign domXml(String fileName){ PosSign pos = new PosSign(); Element element = null; File f = new File(fileName); DocumentBuilder db = null; // documentBuilder为抽象不能直接实例化(将XML文件转换为DOM文件) DocumentBuilderFactory dbf = null; try { dbf = DocumentBuilderFactory.newInstance(); // 返回documentBuilderFactory对象 db = dbf.newDocumentBuilder();// 返回db对象用documentBuilderFatory对象获得返回documentBuildr对象 Document dt = db.parse(f); // 得到一个DOM并返回给document对象 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 ("PUB".equals(node1.getNodeName())) { NodeList nodeDetail = node1.getChildNodes(); // 获得<Accounts>下的节点 for (int j = 0; j < nodeDetail.getLength(); j++) { // 遍历<Accounts>下的节点 Node detail = nodeDetail.item(j); // 获得<Accounts>元素每一个节点 if ("TRXTIME".equals(detail.getNodeName())) { // 输出PUB System.out.println("交易时间: "+ detail.getTextContent()); pos.setTradeTime(detail.getTextContent()); } else if ("TRXDATE".equals(detail.getNodeName())) { // 输出pass System.out.println("交易日期: "+ detail.getTextContent()); pos.setTradeDate(detail.getTextContent()); } } }else if ("OUT".equals(node1.getNodeName())) { NodeList nodeDetail = node1.getChildNodes(); // 获得<Accounts>下的节点 for (int j = 0; j < nodeDetail.getLength(); j++) { // 遍历<Accounts>下的节点 Node detail = nodeDetail.item(j); // 获得<Accounts>元素每一个节点 if ("TRXCODE".equals(detail.getNodeName())) { // 输出PUB System.out.println("83390: "+ detail.getTextContent()); pos.setJiaoyma(detail.getTextContent()); } else if ("RETCODE".equals(detail.getNodeName())) { // 输出pass System.out.println("响应码: "+ detail.getTextContent()); pos.setResponseCode(detail.getTextContent()); }else if("RETMSG".equals(detail.getNodeName())){ System.out.println("响应信息: "+ detail.getTextContent()); pos.setResponseInfo(detail.getTextContent()); }else if("POSID".equals(detail.getNodeName())){ System.out.println("pos终端编号: "+ detail.getTextContent()); pos.setPosPartNum(detail.getTextContent()); }else if("MERID".equals(detail.getNodeName())){ System.out.println("pos商场编号: "+ detail.getTextContent()); pos.setPosShopNum(detail.getTextContent()); }else if("PINKEY".equals(detail.getNodeName())){ System.out.println("PIN_KEY: "+ detail.getTextContent()); pos.setPin_KEY( detail.getTextContent()); }else if("TKEY".equals(detail.getNodeName())){ System.out.println("T_KEY: "+ detail.getTextContent()); pos.setT_KEY(detail.getTextContent()); } } } } } catch (Exception e) { System.out.println(e); } return pos; } 

<?xml version="1.0" encoding="GBK" ?> <COMM> <PUB> <TRXTIME>交易时间</TRXTIME> <TRXDATE>交易日期</TRXDATE> </PUB> <OUT> <TRXCODE>83390</TRXCODE> <RETCODE>响应码</RETCODE> <RETMSG>响应信息</RETMSG> <POSID>pos终端编号</POSID> <MERID>pos商场编号</MERID> <PINKEY>PIN_KEY</PINKEY> <TKEY>T_KEY</TKEY> </OUT> </COMM> 

 

其中有一个实体,是把读取到的xml 数据封装到一个javaBean 中。

 

public class PosSign implements Serializable { /**交易时间*/ private String tradeTime; /**交易日期*/ private String tradeDate; /**交易码*/ private String jiaoyma ; /**响应代码*/ private String responseCode; /**响应信息*/ private String responseInfo; /**pos终端编号*/ private String posPartNum; /**pos商场编号*/ private String posShopNum; /**终端流水号*/ private String pointNum; /**PIN_KEY*/ private String pin_KEY; /**T_KEY*/ private String t_KEY; getters(); setters(); } 

 

转载于:https://www.cnblogs.com/java20130726/archive/2011/05/18/3218383.html

Java中处理XML内容通常涉及到解析XML文件或字符串,以及生成或修改XML结构。这可以通过不同的XML处理库来实现,如JDK自带javax.xml.parsers以及第三方库如Apache Commons Digester或JDOM等。以下是一个基本的介绍: 1. 解析XML使用DOM(文档对象模型)、SAX(简单APIXML)或StAX(流式XML)解析器来解析XML文件。DOM解析器将整个XML文档加载到内存中,并构建一个树状结构,然后可以方便地查询和修改文档结构。SAX解析器是一种基于事件的解析方式,它一次处理XML文档的一个片段,适合处理大型文件,但操作起来不如DOM方便。StAX是一种基于游标模型的解析方式,它允许用户控制解析过程。 2. 生成XML:可以使用DOM操作已解析的XML树来生成新的XML文件。也可以通过XML Builder模式(如使用JDOM或XOM库)来构建新的XML文档。这些库提供了更高级的API来简化XML文档的创建和修改。 3. 修改XML:在有了XML文档的DOM表示之后,可以很容易地修改节点,添加新节点,删除现有节点或更改节点的属性等。 以下是一个简单的例子,展示如何使用Java内置的DOM解析器来读取XML文件并打印出所有元素的名称: ```java import javax.xml.parsers.*; import org.w3c.dom.*; import java.io.*; public class XmlParsingExample { public static void main(String[] args) { try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse(new File("example.xml")); NodeList nodeList = document.getElementsByTagName("*"); for (int i = 0; i < nodeList.getLength(); i++) { Node node = nodeList.item(i); System.out.println(node.getNodeName()); } } catch (Exception e) { e.printStackTrace(); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值