加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xml解析

发布时间:2020-12-16 07:39:01 所属栏目:百科 来源:网络整理
导读:XML文件: Sync desTable="M_Base_Customers" srcTable="reader" field desField="outid" srcField="rdid" update="false"/field desField="name" srcField="rdname" /field desField="sex" srcField="rdsex" /field desField="certificateid" value="0" upd

XML文件:

<Sync desTable="M_Base_Customers" srcTable="reader" >
		<field desField="outid" srcField="rdid" update="false"/>
		<field desField="name" srcField="rdname" />
		<field desField="sex" srcField="rdsex" />
		<field desField="certificateid" value="0" update="false"/>
		<field desField="idcardno" srcField="rdcertify" />
		<field desField="dpcode" value="001" update="false"/>
		<field desField="regstartyear" srcField="rdintime"/>
<!-- 		<field desField="updateflag" value="1" /> ????-->
<!-- 		<field desField="UPDATEDT" srcField="rdcertify" /> -->
		<field desField="ecode" value="00000000" update="false"/> 
		<field desField="cardtype" value="1" update="false"/>
		<field desField="custsf" value="1" update="false"/>
		<field desField="nousedate" srcField="rdenddate"/>
	

		<field desField="nation" srcField="rdnation" />

		<field desField="telephone" srcField="rdphone" />	
		<field desField="birthday" srcField="rdborndate" />
		<field desField="address" srcField="rdaddress" />
		<field desField="email" srcField="rdemail" />
</Sync>

第一步:获取Document对象

	/*
	 * 先把指定的xml文件转换成内存对象
	 * 通过xml文件得到org.w3c.dom.Document对象
	 */
	public static Document getDocument(String file) {
//		1.DocumentBuilderFactory
		DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
		DocumentBuilder documentBuilder = null;
		Document doc = null;
		try {
//		2.DocumentBuilderFactory生产出DocumentBuiler	
			documentBuilder = builderFactory.newDocumentBuilder();
//		3.DocumentBuiler通过xml文件名parse出org.w3c.dom.Document
			doc = documentBuilder.parse(file);
		} catch (Exception e) {
			e.printStackTrace();
		} 
		return doc;
	}

第二步:得到Sync根节点及其属性

//		得到了根节点
		Element element = doc.getDocumentElement();
//		获取根节点的属性
		element.getAttribute("desTable");
		element.getAttribute("srcTable");


第三步:得到根节点Sync的子节点Fileld节点的集合

//Element extends Node,获取该Node的节点名为field的node集合
List<Node> nodeList = XmlUtils.getNodes(element,"field");
for (Node node:nodeList) {
//	得到该Node的属性名为desField的属性值
	XmlUtils.getProperty(node,"desField");
	XmlUtils.getProperty(node,"srcField");
	XmlUtils.getProperty(node,"value");
}

具体实现:
1.XmlUtils.getNodes(element,"field");

/**
	 * 得到子节点的集合
	 * @param node 父节点
	 * @param nodeName 要得到的子节点的名字
	 * @return org.w3c.dom.Node
	 */
	public static List<Node> getNodes(Node node,String nodeName) {
//		获取的是所有的子节点的集合,不区分节点名
		NodeList nodeList = node.getChildNodes();
		List<Node> usingNodeList = new ArrayList<Node>();
		
		for (int i = 0; i < nodeList.getLength(); i++) {
			Node tempNode = nodeList.item(i);
			//只把指定的节点名的节点加入到集合中
			if (nodeName.equalsIgnoreCase(tempNode.getNodeName())) {
				usingNodeList.add(tempNode);
			}
		}
		return usingNodeList;
	}
2.XmlUtils.getProperty(node,"value");
/**
	 * 
	 * @param node 要获取属性的节点
	 * @param propertyName 属性的名
	 * @return 属性值
	 */
	public static String getProperty(Node node,String propertyName) {
//		所有属性的值
		 NamedNodeMap attributes = node.getAttributes();
//		一切都是节点
		 Node attribute = attributes.getNamedItem(propertyName);
		 if (attribute != null) {
			 return attribute.getNodeValue();
		 } else {
			 return null;
		 }
	}
最后,两个获取属性的地方的比较 根节点 element.getAttribute("desTable"); 非根节点 NamedNodeMap attributes = node.getAttributes(); Node attribute = attributes.getNamedItem(propertyName);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读