我用sax解析xml字符串,发现当有子节点的时候,子节点的数据时获取不到的,谁能帮我改下代码?实现可以正常解析所有xml字符串。public static MessageData analyzeXML(String value){
MessageData md = new MessageData();
Commoditys cd = new Commoditys();
StringReader read = new StringReader(value);
InputSource source = new InputSource(read);
SAXBuilder saxb = new SAXBuilder();
// List result = null;
Map<String,String> map = new HashMap<String,String>();
try {
// result = new ArrayList();
Document doc = saxb.build(source);
Element root = doc.getRootElement();
List node = root.getChildren();
Element et = null;
for (int i = 0; i < node.size(); i++) {
et = (Element) node.get(i);
List subNode = et.getChildren();
Element subEt = null;
for (int j = 0; j < subNode.size(); j++) {
subEt = (Element) subNode.get(j);
map.put(subEt.getName(), subEt.getText());
}
// if (map.size() > 0)
// result.add(map);
}
} catch (JDOMException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
md.setBarCode(map.get("BarCode"));
md.setOrderNumber(map.get("OrderNumber"));
md.setRecipientName(map.get("RecipientName"));
md.setRecipientAddress(map.get("RecipientAddress"));
md.setRecipientCode(map.get("RecipientCode"));
md.setRecipientPhone(map.get("RecipientPhone"));
md.setPayment(map.get("Payment"));
md.setWeight(map.get("Weight"));
md.setPostage(map.get("Postage"));
md.setServiceCharge(map.get("ServiceCharge"));
md.setPostagePostPaidFlag(map.get("PostagePostPaidFlag"));
md.setMailType(map.get("MailType"));
md.setOrderFlag(map.get("OrderFlag"));
md.setDescription(map.get("Description"));
md.setSign(map.get("Sign"));
md.setMerchantPublicCert(map.get("MerchantPublicCert"));
cd.setCommodityName(map.get("CommodityName"));
cd.setCommodityCode(map.get("CommodityCode"));
cd.setQuantity(map.get("Quantity"));
cd.setUnitPrice(map.get("UnitPrice"));
md.setCommoditys(cd);
return md;
}
发现当xml字符串如下时,cd.setCommodityName(map.get("CommodityName"));
cd.setCommodityCode(map.get("CommodityCode"));
cd.setQuantity(map.get("Quantity"));
cd.setUnitPrice(map.get("UnitPrice"));这几个是空值的,也就是没解析到。StringBuffer xml = new StringBuffer();
xml.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
xml.append("<Result xmlns=\"http://www.fiorano.com/fesb/activity/DBQueryOnInput2/Out\">");
xml.append("<Content>");
xml.append("<BarCode>424244244 </BarCode >");
xml.append("<OrderNumber>42244</OrderNumber >");
xml.append("<RecipientName>ffff</RecipientName>");
xml.append("<RecipientAddress>gggg</RecipientAddress>");
xml.append("<RecipientPhone>332323</RecipientPhone>");
xml.append("<RecipientCode>收件人fggf</RecipientCode>");
xml.append("<Payment>1452 </Payment>");
xml.append("<Weight>24</Weight>");
xml.append("<Postage>145</Postage>");
xml.append("<ServiceCharge>354</ServiceCharge>");
xml.append("<PostagePostPaidFlag>1</PostagePostPaidFlag>");
xml.append("<MailType>0</MailType>");
xml.append("<OrderFlag>2</OrderFlag>");
xml.append("<Commoditys>");
xml.append("<Commodity>");
xml.append("<CommodityName>fgf</CommodityName>");
xml.append("<UnitPrice>758</UnitPrice>");
xml.append("<Quantity>50</Quantity>");
xml.append("<CommodityCode>dfdf23323</CommodityCode>");
xml.append("</Commodity>");
xml.append("</Commoditys>");
xml.append("<Description>附加说明</Description>");
xml.append("</Content>");
xml.append("</Result>");
MessageData md = Parser.analyzeXML(xml.toString());
MessageData md = new MessageData();
Commoditys cd = new Commoditys();
StringReader read = new StringReader(value);
InputSource source = new InputSource(read);
SAXBuilder saxb = new SAXBuilder();
// List result = null;
Map<String,String> map = new HashMap<String,String>();
try {
// result = new ArrayList();
Document doc = saxb.build(source);
Element root = doc.getRootElement();
List node = root.getChildren();
Element et = null;
for (int i = 0; i < node.size(); i++) {
et = (Element) node.get(i);
List subNode = et.getChildren();
Element subEt = null;
for (int j = 0; j < subNode.size(); j++) {
subEt = (Element) subNode.get(j);
map.put(subEt.getName(), subEt.getText());
}
// if (map.size() > 0)
// result.add(map);
}
} catch (JDOMException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
md.setBarCode(map.get("BarCode"));
md.setOrderNumber(map.get("OrderNumber"));
md.setRecipientName(map.get("RecipientName"));
md.setRecipientAddress(map.get("RecipientAddress"));
md.setRecipientCode(map.get("RecipientCode"));
md.setRecipientPhone(map.get("RecipientPhone"));
md.setPayment(map.get("Payment"));
md.setWeight(map.get("Weight"));
md.setPostage(map.get("Postage"));
md.setServiceCharge(map.get("ServiceCharge"));
md.setPostagePostPaidFlag(map.get("PostagePostPaidFlag"));
md.setMailType(map.get("MailType"));
md.setOrderFlag(map.get("OrderFlag"));
md.setDescription(map.get("Description"));
md.setSign(map.get("Sign"));
md.setMerchantPublicCert(map.get("MerchantPublicCert"));
cd.setCommodityName(map.get("CommodityName"));
cd.setCommodityCode(map.get("CommodityCode"));
cd.setQuantity(map.get("Quantity"));
cd.setUnitPrice(map.get("UnitPrice"));
md.setCommoditys(cd);
return md;
}
发现当xml字符串如下时,cd.setCommodityName(map.get("CommodityName"));
cd.setCommodityCode(map.get("CommodityCode"));
cd.setQuantity(map.get("Quantity"));
cd.setUnitPrice(map.get("UnitPrice"));这几个是空值的,也就是没解析到。StringBuffer xml = new StringBuffer();
xml.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
xml.append("<Result xmlns=\"http://www.fiorano.com/fesb/activity/DBQueryOnInput2/Out\">");
xml.append("<Content>");
xml.append("<BarCode>424244244 </BarCode >");
xml.append("<OrderNumber>42244</OrderNumber >");
xml.append("<RecipientName>ffff</RecipientName>");
xml.append("<RecipientAddress>gggg</RecipientAddress>");
xml.append("<RecipientPhone>332323</RecipientPhone>");
xml.append("<RecipientCode>收件人fggf</RecipientCode>");
xml.append("<Payment>1452 </Payment>");
xml.append("<Weight>24</Weight>");
xml.append("<Postage>145</Postage>");
xml.append("<ServiceCharge>354</ServiceCharge>");
xml.append("<PostagePostPaidFlag>1</PostagePostPaidFlag>");
xml.append("<MailType>0</MailType>");
xml.append("<OrderFlag>2</OrderFlag>");
xml.append("<Commoditys>");
xml.append("<Commodity>");
xml.append("<CommodityName>fgf</CommodityName>");
xml.append("<UnitPrice>758</UnitPrice>");
xml.append("<Quantity>50</Quantity>");
xml.append("<CommodityCode>dfdf23323</CommodityCode>");
xml.append("</Commodity>");
xml.append("</Commoditys>");
xml.append("<Description>附加说明</Description>");
xml.append("</Content>");
xml.append("</Result>");
MessageData md = Parser.analyzeXML(xml.toString());
for (int i = 0; i < node.size(); i++) {
et = (Element) node.get(i);
List subNode = et.getChildren();
Element subEt = null;
for (int j = 0; j < subNode.size(); j++) {
subEt = (Element) subNode.get(j);
if(subEt.getName().equals("Commoditys")) {
List subNode_ = et.getChildren();
Element subEt_ = null;
for (int n = 0; n < subNode_.size(); n++) {
subEt_ = (Element) subNode_.get(n);
map.put(subEt_.getName(), subEt_.getText());
}
}
map.put(subEt.getName(), subEt.getText());
}
}