要求用Java 格式化的结果 存放在 Map 中,最好 再把Map 放在List中 其中 "r8"表示double数据类型, <?xml version="1.0" encoding="gb2312"?>
<DATAPACKET Version="2.0">
<METADATA>
<FIELDS>
<FIELD attrname="b" fieldname="SERIALNO" fieldtype="string" required="true" WIDTH="20"/>
<FIELD attrname="c" fieldname="ACCTSERIALNO" fieldtype="string" WIDTH="100"/>
<FIELD attrname="d" fieldname="CARDTYPE" fieldtype="r8"/>
<FIELD attrname="e" fieldname="TXNSERIALNO" fieldtype="string" WIDTH="20"/>
<FIELD attrname="f" fieldname="BIZNO" fieldtype="string" WIDTH="20"/>
<FIELD attrname="g" fieldname="TRADENAME" fieldtype="string" WIDTH="40"/>
<FIELD attrname="h" fieldname="CUR" fieldtype="string" SUBTYPE="FixedChar" WIDTH="3"/>
<FIELD attrname="i" fieldname="AMT" fieldtype="r8"/>
<FIELD attrname="j" fieldname="OPERID" fieldtype="string" WIDTH="10"/>
<FIELD attrname="k" fieldname="PRINTDEGREE" fieldtype="r8"/>
<FIELD attrname="l" fieldname="CARDNO" fieldtype="r8"/>
<FIELD attrname="m" fieldname="CARDNAME" fieldtype="string" WIDTH="40"/>
<FIELD attrname="n" fieldname="ACCTDATE" fieldtype="dateTime"/>
<FIELD attrname="o" fieldname="ORGNO" fieldtype="string" WIDTH="20"/>
</FIELDS>
</METADATA>
<ROWDATA>
<ROW b="1111141321259821484" c="1111140000013070" d="2.0" e="1111140000013070" f="5566IRJX11000289" g="登记解付" h="USD" i="25496.68" j="96" k="0.0" l="21.0" m="通用记帐凭证" n="20111114T00:00:00000" o="1000000000" />
<ROW b="1111141321259851625" c="1111140000013069" d="2.0" e="1111140000013069" f="5566IRJX11000290" g="登记解付" h="USD" i="35431.6" j="96" k="0.0" l="21.0" m="通用记帐凭证" n="20111114T00:00:00000" o="1000000000" />
</ROWDATA>
</DATAPACKET>
<DATAPACKET Version="2.0">
<METADATA>
<FIELDS>
<FIELD attrname="b" fieldname="SERIALNO" fieldtype="string" required="true" WIDTH="20"/>
<FIELD attrname="c" fieldname="ACCTSERIALNO" fieldtype="string" WIDTH="100"/>
<FIELD attrname="d" fieldname="CARDTYPE" fieldtype="r8"/>
<FIELD attrname="e" fieldname="TXNSERIALNO" fieldtype="string" WIDTH="20"/>
<FIELD attrname="f" fieldname="BIZNO" fieldtype="string" WIDTH="20"/>
<FIELD attrname="g" fieldname="TRADENAME" fieldtype="string" WIDTH="40"/>
<FIELD attrname="h" fieldname="CUR" fieldtype="string" SUBTYPE="FixedChar" WIDTH="3"/>
<FIELD attrname="i" fieldname="AMT" fieldtype="r8"/>
<FIELD attrname="j" fieldname="OPERID" fieldtype="string" WIDTH="10"/>
<FIELD attrname="k" fieldname="PRINTDEGREE" fieldtype="r8"/>
<FIELD attrname="l" fieldname="CARDNO" fieldtype="r8"/>
<FIELD attrname="m" fieldname="CARDNAME" fieldtype="string" WIDTH="40"/>
<FIELD attrname="n" fieldname="ACCTDATE" fieldtype="dateTime"/>
<FIELD attrname="o" fieldname="ORGNO" fieldtype="string" WIDTH="20"/>
</FIELDS>
</METADATA>
<ROWDATA>
<ROW b="1111141321259821484" c="1111140000013070" d="2.0" e="1111140000013070" f="5566IRJX11000289" g="登记解付" h="USD" i="25496.68" j="96" k="0.0" l="21.0" m="通用记帐凭证" n="20111114T00:00:00000" o="1000000000" />
<ROW b="1111141321259851625" c="1111140000013069" d="2.0" e="1111140000013069" f="5566IRJX11000290" g="登记解付" h="USD" i="35431.6" j="96" k="0.0" l="21.0" m="通用记帐凭证" n="20111114T00:00:00000" o="1000000000" />
</ROWDATA>
</DATAPACKET>
解决方案 »
- onbeforeunload 事件控制问题
- 请教struts2参数传递问题
- 一个文件下载的小例子,出错我怎么也调不出来,哪位高人指点一下..很急,在线等...
- 请教: 数据库中的表的数组问题????
- hibernate_查询
- 在服务端已经形成了xml格式的数据,如何将他返回到客户端
- 这样引用include指令为什么没效?
- Jboss问题: WEB-INF\lib下的*.jar文件每次更改,jboss都要重启么?
- Apache SOAP v2.3包在哪里下载
- 有关Comparable与Comparator比较器
- spring配置,无法关闭连接,高手帮我看看
- 使用FCKEditor标签文本显示问题
我对怎么封装成map的需求不太清楚,lz自己做吧import java.io.File;
import java.util.List;import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;public class MyReaderXMLTest {
public static void main(String[] args) {
try {
SAXReader saxReader=new SAXReader();
Document doc=saxReader.read(new File("MyXml1.xml"));
List<Node> data=doc.selectNodes("/DATAPACKET/METADATA/FIELDS/FIELD");
for(Node node:data){
if("Element".equals(node.getNodeTypeName())){
Element element=(Element)node;
System.out.print(element.attributeValue("attrname")+"\t");
System.out.print(element.attributeValue("fieldname")+"\t");
System.out.print(element.attributeValue("fieldtype")+"\t");
System.out.print(element.attributeValue("required")+"\t");
System.out.print(element.attributeValue("WIDTH")+"\t");
System.out.println();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
dom4j,sax,dom,Jdom
import java.io.File;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;public class Dom4jTest { public void iterateWholeXML() { Map hm = new HashMap();
String attrName; // 使用SAXReader解析
SAXReader saxReader = new SAXReader(); try {
Document document = saxReader.read(new File("F:\\test.xml"));
// 获取节点
Element root = document.getRootElement();
System.out.println("DATAPACKET根节点" + root); // XPath取得具体的节点
Element driverClassNameElement = (Element) document
.selectSingleNode("//DATAPACKET/METADATA/FIELDS/FIELD");
String driverClassName = driverClassNameElement.getText();// 没有文本内容
System.out.println("driverClassName" + driverClassName); // 获取FIELD 节点中的属性内容
// 用XPath直接获得要操作的FIELD节点
List driverClassNameListField = document
.selectNodes("//DATAPACKET/METADATA/FIELDS/FIELD");
for (Iterator itField = driverClassNameListField.iterator(); itField
.hasNext();) {
Element fieldElement = (Element) itField.next();
attrName = fieldElement.attributeValue("attrname");
String fieldName = fieldElement.attributeValue("fieldname");
String fieldType = fieldElement.attributeValue("fieldtype");
String fieldRequired = fieldElement.attributeValue("required");
String fieldWidth = fieldElement.attributeValue("WIDTH");
System.out.println("attrname:" + attrName + "\t" + "fieldname:"
+ fieldName + "\t" + "fieldtype:" + fieldType + "\t"
+ "fieldrequired:" + fieldRequired + "\t"
+ "fieldWidth:" + fieldWidth);
}
// 获取ROW节点中的属性内容
// 用XPath直接获得要操作的ROW节点
List driverClassNameListRow = document
.selectNodes("//DATAPACKET/ROWDATA/ROW");
for (Iterator itRow = driverClassNameListRow.iterator(); itRow
.hasNext();) {
Element rowElement = (Element) itRow.next();
String bName = rowElement.attributeValue("b");
String cName = rowElement.attributeValue("c");
String dName = rowElement.attributeValue("d");
String eName = rowElement.attributeValue("e");
String fName = rowElement.attributeValue("f");
String gName = rowElement.attributeValue("g");
String hName = rowElement.attributeValue("h");
String iName = rowElement.attributeValue("i");
String jName = rowElement.attributeValue("j");
String kName = rowElement.attributeValue("k");
String lName = rowElement.attributeValue("l");
String mName = rowElement.attributeValue("m");
String nName = rowElement.attributeValue("n");
String oName = rowElement.attributeValue("o");
System.out.println("b:" + bName + "\t" + "c:" + cName + "\t"
+ "d:" + dName + "\t" + "e:" + eName + "\t" + "f:"
+ fName + "\t" + "g:" + gName + "\t" + "h:" + hName
+ "\t" + "i:" + iName + "\t" + "j:" + jName + "\t"
+ "k:" + kName + "\t" + "l:" + lName + "\t" + "m:"
+ mName + "\t" + "n:" + nName + "\t" + "o:" + oName);
}
} catch (DocumentException e) {
e.printStackTrace();
}
} public static void main(String[] args) {
Dom4jTest dom = new Dom4jTest();
dom.iterateWholeXML(); }}
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;public class MyReaderXMLTest1 { //return list
public List iterateWholeXML() {
// Map hm = new HashMap();
//add
List list = new ArrayList();
String attrName;
// 使用SAXReader解析
SAXReader saxReader = new SAXReader();
try {
Document document = saxReader.read(new File("MyXml1.xml"));
// 获取节点
Element root = document.getRootElement();
System.out.println("DATAPACKET根节点" + root);
// XPath取得具体的节点
Element driverClassNameElement = (Element) document.selectSingleNode("//DATAPACKET/METADATA/FIELDS/FIELD");
String driverClassName = driverClassNameElement.getText();// 没有文本内容
System.out.println("driverClassName" + driverClassName);
// 获取FIELD 节点中的属性内容
// 用XPath直接获得要操作的FIELD节点
List driverClassNameListField = document.selectNodes("//DATAPACKET/METADATA/FIELDS/FIELD");
Map map = null;
for (Iterator itField = driverClassNameListField.iterator(); itField.hasNext();) {
Element fieldElement = (Element) itField.next();
attrName = fieldElement.attributeValue("attrname");
String fieldName = fieldElement.attributeValue("fieldname");
String fieldType = fieldElement.attributeValue("fieldtype");
String fieldRequired = fieldElement.attributeValue("required");
String fieldWidth = fieldElement.attributeValue("WIDTH");
//add
map = new HashMap();
map.put("type", "Field");
map.put("attrName",attrName);
map.put("fieldName",fieldName);
map.put("fieldType",fieldType);
map.put("fieldRequired",fieldRequired);
map.put("fieldWidth",fieldWidth);
list.add(map);
//add
System.out.println("attrname:" + attrName + "\t" + "fieldname:"+ fieldName + "\t" + "fieldtype:" + fieldType + "\t"+ "fieldrequired:" + fieldRequired + "\t"+ "fieldWidth:" + fieldWidth);
}
// 获取ROW节点中的属性内容
// 用XPath直接获得要操作的ROW节点
List driverClassNameListRow = document.selectNodes("//DATAPACKET/ROWDATA/ROW");
for (Iterator itRow = driverClassNameListRow.iterator(); itRow.hasNext();) {
Element rowElement = (Element) itRow.next();
String bName = rowElement.attributeValue("b");
String cName = rowElement.attributeValue("c");
String dName = rowElement.attributeValue("d");
String eName = rowElement.attributeValue("e");
String fName = rowElement.attributeValue("f");
String gName = rowElement.attributeValue("g");
String hName = rowElement.attributeValue("h");
String iName = rowElement.attributeValue("i");
String jName = rowElement.attributeValue("j");
String kName = rowElement.attributeValue("k");
String lName = rowElement.attributeValue("l");
String mName = rowElement.attributeValue("m");
String nName = rowElement.attributeValue("n");
String oName = rowElement.attributeValue("o");
System.out.println("b:" + bName + "\t" + "c:" + cName + "\t"
+ "d:" + dName + "\t" + "e:" + eName + "\t" + "f:"
+ fName + "\t" + "g:" + gName + "\t" + "h:" + hName
+ "\t" + "i:" + iName + "\t" + "j:" + jName + "\t"
+ "k:" + kName + "\t" + "l:" + lName + "\t" + "m:"
+ mName + "\t" + "n:" + nName + "\t" + "o:" + oName);
}
} catch (DocumentException e) {
e.printStackTrace();
}
//add
return list;
} public static void main(String[] args) {
MyReaderXMLTest1 dom = new MyReaderXMLTest1();
//add
List list = dom.iterateWholeXML();
System.out.println(((Map)list.get(0)).get("attrName"));
}}
不好意思我表达不是很清楚
先道歉啦 嗯嗯 看过代码 不过还没达到预期的目的
List显示结果中[{fieldType=string, fieldWidth=20, fieldName=SERIALNO, attrName=b,fieldRequired=true},......怎么和ROW中的数据b="1111141321259821484"关联 再装在Map中 同理 {fieldType=string, fieldWidth=100, fieldName=ACCTSERIALNO, attrName=c, fieldRequired=null},和ROW中的c="1111140000013070"组成键值对 装在Map中在线等咯
field定义了row类的属性
把一个row用field的方式解析出来,放到一个map里面
再把多个map放到list里面这样才意思很类也
xml好像可以和java对象互转
很方便的
嗯嗯 field定义了row类的属性
把一个row用field的方式解析出来,放到一个map里面
这样就行啦 可怎么实现呢?
多谢提议哦
//假设xml文件中的内容 是data
Document doc = DocumentHelper.parseText(data);
//List<Node> 就是field的集合,然后循环,将每一个放到Map中
List<Node> docs = doc.selectNodes("//DATAPACKET /METADATA/FIELDS");
//同理得到row的集合
List<Node> docs2 = doc.selectNodes("//DATAPACKET /ROWDATA");
正是这样做的 可是怎么实现下面的效果类?
field定义了row类的属性
把一个row用field的方式解析出来,放到一个map里面