形式1 <节点名称>[值]</节点名称> 如:<title>文章标题</title>
形式2 <节点名称 属性1=[值] 属性2=[值] 属性3=[值] ... 属性N=[值]/>
例如: <row col1="11" col2="一(一)班" col3="初一" col4="三峡高级中学" col5="20" col6="30" col7="50"/>
解析方法(使用的是dom4j):
形式1:
思路:(1)先把xml解析成Document对象------>Document parseText = DocumentHelper.parseText(xmlcon);
(2)然后通过Document对象得到根元素Element----->Element element = parseText.getRootElement();
(3) 再由根元素得到它所有的元素elementIterator------>Iterator elementIterator = ele.elementIterator();
(4)遍历这个iterator,得到其节点名称和值-------->
while(elementIterator.hasNext()){
Element next = (Element) elementIterator.next();
String name1 = next.getName();//节点名称
String text1 = next.getText();//值
}
注意:一般节点元素下边可能还有节点所以还可以用此方法递归调用,直到没有子元素了。
形式2:
思路:(1)先通过形式1的解析拿到元素
(2) 然后使用element元素得到元素里的所有attribute------->Iterator iterator = next.attributeIterator();
(3)遍历这个iterator,得到属性和值------->
for(Iterator iterator = next.attributeIterator();iterator.hasNext();){
Attribute next2 = (Attribute) iterator.next();
String name = next2.getName();
String text = next2.getText();
System.out.println(name+i+"="+text);
}
}
第一种形式的情况,解析方式如下:
public class ParseXmlTest {
@SuppressWarnings("rawtypes")
static Map map = new HashMap();
@SuppressWarnings({ "unchecked" })
public static void main(String[] args) {
String aa = "<taxML><head><retCode></retCode>"
+ "<retMsg>100</retMsg>"
+ "</head><body><wszhm>343294824390134</wszhm><kadm>3433</kadm>"
+ "<kamc>3434</kamc><se>43</se><tfrq>3</tfrq><bdlx>4</bdlx>"
+ "<jhjg>4</jhjg><bflx>0</bflx></body>"
+ "<body><wszhm>343294824390134L</wszhm><kadm>3433L</kadm>"
+ "<kamc>3434</kamc><se>43</se><tfrq>3</tfrq><bdlx>4</bdlx>"
+ "<jhjg>4</jhjg><bflx>0</bflx></body></taxML>";
Map<String, String> parseContent = new HashMap();
try {
Document parseText = DocumentHelper.parseText(aa);
Element element = parseText.getRootElement();
parseContent = parseXml(element);
} catch (DocumentException e) {
e.printStackTrace();
}
for(Map.Entry<String, String> entry : parseContent.entrySet()){
String key = entry.getKey().toString();
String value = entry.getValue();
System.out.println(key+"的值是"+value);
}
}
@SuppressWarnings({ "rawtypes", "unchecked" })
public static Map parseXml(Element element){
Iterator elementIterator = element.elementIterator();
while(elementIterator.hasNext()){
Element elem = (Element) elementIterator.next();
map.put(elem.getName(),elem.getText());
parseXml(elem);
}
return map;
}
}
第二种形式的情况,解析方式如下:
public class ParseAttribute {
int i = 0;
String sehj = null;
double se = 0;
public static void main(String[] args) {
String bb = "<?xml version=\"1.0\" encoding=\"GBK\"?>"
+ "<!DOCTYPE SCHEMA SYSTEM \"HGWSPZJK.dtd\">"
+ "<SCHEMA NAME=\"HGWSPZ\" CHSNAME=\"海关完税凭证抵扣清单\" SSSQ=\"201606\" CRC=\"HGWSPZ201606_610186578436847_CRC.XML\">"
+ "<TAXPAYER SWSBH=\"610186578436847\" NSRMC=\"西安绿一传媒有限公司\" SBRQ=\"2016-06-23\" RECORDCOUNT=\"1\" CJLX=\"DKZK\" CJRDM=\"610186578436847\" CJRMC=\"西安绿一传媒有限公司\">"
+ "<Records><Record FPHM=\"425820161000075756-L02\" TFRQ=\"2016-06-23\" SE=\"5000\" JKKAMC=\"青岛\" JKKADM=\"4258\" BZ=\"\"/>"
+ "<Record FPHM=\"425820161000075756-L02\" TFRQ=\"2016-06-23\" SE=\"5000\" JKKAMC=\"青岛\" JKKADM=\"4258\" BZ=\"\"/></Records></TAXPAYER></SCHEMA>";
int startindex = bb.indexOf("<SCHEMA");
String bbb = bb.substring(startindex);
try {
Document parseText = DocumentHelper.parseText(bbb);
Element element = parseText.getRootElement();
ParseAttribute p = new ParseAttribute();
p.pp(element);
} catch (DocumentException e) {
e.printStackTrace();
}
}
public void pp(Element eke){
Iterator elementIterator = eke.elementIterator();
while(elementIterator.hasNext()){
Element next = (Element) elementIterator.next();
String name1 = next.getName();
String text1 = next.getText();
System.out.println(name1+"="+text1);
if("Record".equals(next.getName())){
for(Iterator iterator = next.attributeIterator();iterator.hasNext();){
Attribute next2 = (Attribute) iterator.next();
String name = next2.getName();
String text = next2.getText();
System.out.println(name+i+"="+text);
if("SE".equals(name)){
String ses = (String) text;
se+= Double.valueOf(ses);
}
}
i++;
}
sehj = String.valueOf(se);
System.out.println(sehj);
System.out.println(i);
pp(next);
}
}
}