日期:2014-05-20  浏览次数:20753 次

java XML高手请进 求 格式化一份 XML 文件 高分给你哦
要求用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>

------解决方案--------------------
我把FIELD的值全部取出来了,ROW也是差不多的
我对怎么封装成map的需求不太清楚,lz自己做吧
Java code

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