百分相送:大唐电信笔试上机题(关于SAX解析XML的)大家试试!
用SAX解析下列XML:
<?xml version= "1.0 "?>
<in>
<sheader>
<mac> </mac>
<MACInstNo> 9850 </MACInstNo>
<PINSeed> </PINSeed>
<SrcChnlNo> 850 </SrcChnlNo>
<ChkFlag> </ChkFlag>
<CombFlag> </CombFlag>
<HostServ> waiwei_02 </HostServ>
</sheader>
<tpheader>
<TermId> </TermId>
<InstNo> 3500 </InstNo>
<TlrNo> 901004 </TlrNo>
</tpheader>
<tdheader>
<TranCode> 7703 </TranCode>
<TermJourNo> 000850326665 </TermJourNo>
<TermDate> 20070706 </TermDate>
<AuthTlrNo> </AuthTlrNo>
<AuthPIN> </AuthPIN>
<AuthCardFlag> </AuthCardFlag>
<AuthCardSeq> </AuthCardSeq>
</tdheader>
<tin>
<Type> 1 </Type>
<mobileNum> 123456 </mobileNum>
<Mode> 1 </Mode>
</tin>
</in>
解析结果为一个Map,key是xml中元素的全路径,value是元素的值,例如:
in.sheader.MACInstNo = 9850
------解决方案--------------------import java.io.File;
import
java.io.IOException;
import java.util.Map;
import java.util.TreeMap;
import
javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import
org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class SAXTest extends DefaultHandler{
private static Map <String, String> map = new TreeMap <String, String> ();
private String curKey = " ";
private String key = " ";
private String value = " ";
public static void main(String[] args) throws Parser
ConfigurationException,
SAXException,
IOException {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
parser.parse(new File( "a.xml "), new SAXTest());
// 输出 map
for(Map.Entry <String, String> entry : map.entrySet()) {
System.out.println(entry.getKey() + " --> " + entry.getValue());
}
}
public void startElement(String namespaceURI, String localName,
String qName, Attributes attributes) throws SAXException {
if (key.length() == 0) {
key = qName;
} else {
key = key + ". " + qName;
}
curKey = qName;
}
public void endElement(String uri, String localName, String qName)
throws SAXException {
if (key.contains( ". ")) {
if (curKey.equals(qName)) {