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);