问:每个月2000工资,怎样才能在厦门买一套100平的房子和一辆奥迪A6
答:先给自己定个小目标,比如说先活他个250年,然后向天再借500年
言归正传
读取XML(一)
创建一个school.xml文件,内容如下
<?xml version="1.0" encoding="UTF-8" ?>
<sync>
<fields_ref>
<!--学生指标对应: corr_befor(对应前指标) corr_befor(对应后指标) desc(指标描述)-->
<info table="students">
<field_ref corr_befor="stu_id" corr_after="stuId" desc="学号"></field_ref>
<field_ref corr_befor="stu_name" corr_after="stuName" desc="学生姓名"></field_ref>
<field_ref corr_befor="stu_age" corr_after="stuAge" desc="学生年龄"></field_ref>
<field_ref corr_befor="stu_sex" corr_after="stuSex" desc="学生性别" ></field_ref>
<field_ref corr_befor="stu_gra" corr_after="stuGra" desc="所在班级" ></field_ref>
</info>
<info table="teachers">
<field_ref corr_befor="tea_id" corr_after="teaId" desc="教师编号"></field_ref>
<field_ref corr_befor="tea_name" corr_after="teaName" desc="教师姓名"></field_ref>
<field_ref corr_befor="tea_age" corr_after="teaAge" desc="教学年数"></field_ref>
<field_ref corr_befor="tea_subject" corr_after="teaSubject" desc="教学科目"></field_ref>
</info>
<info table="grades">
<field_ref corr_befor="gra_name" corr_after="graName" desc="教室名字"></field_ref>
<field_ref corr_befor="gra_num" corr_after="graNum" desc="学生数量"></field_ref>
<field_ref corr_befor="gra_addrs" corr_after="graAddrs" desc="教室位置"></field_ref>
</info>
<info table="score">
<field_ref corr_befor="stu_id" corr_after="stuId" desc="学生学号"></field_ref>
<field_ref corr_befor="sco_result" corr_after="scoResult" desc="学生成绩"></field_ref>
</info>
</fields_ref>
</sync>
导入相应的包
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.xpath.XPath;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
读取xml文件
public class ReadXML {
private List checkXml() throws Exception {
//xml文件存放地址
String xmlPath = "C:\\tomcat-in\\idea2019.3\\Tomcat-7.0.41-v76\\config" + File.separator + "school.xml";
Document doc = null;
String table = "";
List infoList = new ArrayList();
File file = new File(xmlPath);
if (!file.exists()) {
return infoList;
}
try {
SAXBuilder saxbuilder = new SAXBuilder();
doc = saxbuilder.build(file);
XPath xPath = XPath.newInstance("/sync/fields_ref");
Element infoElement = (Element) xPath.selectSingleNode(doc);
List<Element> info = infoElement.getChildren("info");
for (Element el : info) {
Map<String, String> resutlMap = null;
table = el.getAttributeValue("table");
List fieldList = el.getChildren(); //获取 field_ref
for (int i = 0; i < fieldList.size(); i++) {
resutlMap = new HashMap<String, String>();
Element element = (Element) fieldList.get(i);
String corr_befor = element.getAttributeValue("corr_befor");
String corr_after = element.getAttributeValue("corr_after");
String desc = element.getAttributeValue("desc");
resutlMap.put("corr_befor", corr_befor);
resutlMap.put("corr_after", corr_after);
resutlMap.put("table", table);
resutlMap.put("desc", desc);
infoList.add(resutlMap);
}
}
} catch (Exception e) {
e.printStackTrace();
throw e;
}
return infoList;
}
public static void main(String[] args) {
ReadXML readXML = new ReadXML();
try {
List resultList = readXML.checkXml();
System.out.println(resultList);
} catch (Exception e) {
e.printStackTrace();
}
}
}
输出结果
[
{
corr_befor = stu_id, corr_after = stuId, table = students, desc = 学号
},
{
corr_befor = stu_name, corr_after = stuName, table = students, desc = 学生姓名
},
{
corr_befor = stu_age, corr_after = stuAge, table = students, desc = 学生年龄
},
{
corr_befor = stu_sex, corr_after = stuSex, table = students, desc = 学生性别
},
{
corr_befor = stu_gra, corr_after = stuGra, table = students, desc = 所在班级
},
{
corr_befor = tea_id, corr_after = teaId, table = teachers, desc = 教师编号
},
{
corr_befor = tea_name, corr_after = teaName, table = teachers, desc = 教师姓名
},
{
corr_befor = tea_age, corr_after = teaAge, table = teachers, desc = 教学年数
},
{
corr_befor = tea_subject, corr_after = teaSubject, table = teachers, desc = 教学科目
},
{
corr_befor = gra_name, corr_after = graName, table = grades, desc = 教室名字
},
{
corr_befor = gra_num, corr_after = graNum, table = grades, desc = 学生数量
},
{
corr_befor = gra_addrs, corr_after = graAddrs, table = grades, desc = 教室位置
},
{
corr_befor = stu_id, corr_after = stuId, table = score, desc = 学生学号
},
{
corr_befor = sco_result, corr_after = scoResult, table = score, desc = 学生成绩
}
]
读取XML(二)
xml字符串样例
<?xml version="1.0" encoding=GBK?>
<Message type="response" version="1.0">
<Head>
<Account>zs</Account>
<PassWord>123456</PassWord>
</Head>
<Body>
<UserInfo>
<UserName>张三</UserName>
<Age>23</Age>
<CardID>320481198204092420</CardID>
<deptId>01010301</deptId>
</UserInfo>
<UserLimited>
<UserLimitedVo>
<Code>01</Code>
<Desc>权限1</Desc>
</UserLimitedVo>
<UserLimitedVo>
<Code>02</Code>
<Desc>权限2</Desc>
</UserLimitedVo>
<UserLimitedVo>
<Code>03</Code>
<Desc>权限3</Desc>
</UserLimitedVo>
</UserLimited>
</Body>
</Message>
导入相应包
import net.sf.json.JSONObject;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.xpath.XPath;
import org.xml.sax.InputSource;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
读取xml字符串方法
public static void parseXML() {
String xml = "<?xml version=\"1.0\" encoding=\"GBK\"?>\n" +
"<Message type=\"response\" version=\"1.0\">\n" +
" <Head>\n" +
" <Account>zs</Account>\n" +
" <PassWord>123456</PassWord>\n" +
" </Head>\n" +
" <Body>\n" +
" <UserInfo>\n" +
" <UserName>张三</UserName>\n" +
" <Age>23</Age>\n" +
" <CardID>320481198204092420</CardID>\n" +
" <deptId>01010301</deptId>\n" +
" </UserInfo>\n" +
" <UserLimited>\n" +
" <UserLimitedVo>\n" +
" <Code>01</Code>\n" +
" <Desc>权限1</Desc>\n" +
" </UserLimitedVo>\n" +
" <UserLimitedVo>\n" +
" <Code>02</Code>\n" +
" <Desc>权限2</Desc>\n" +
" </UserLimitedVo>\n" +
" <UserLimitedVo>\n" +
" <Code>03</Code>\n" +
" <Desc>权限3</Desc>\n" +
" </UserLimitedVo>\n" +
" </UserLimited>\n" +
" </Body>\n" +
"</Message>\n";
try {
StringReader reader = new StringReader(xml);
InputSource source = new InputSource(reader);
SAXBuilder saxbuilder = new SAXBuilder();
Document document = saxbuilder.build(source);
//获取Message节点属性
String path = "/Message";
XPath xPath = XPath.newInstance(path);
List paramslist = xPath.selectNodes(document);
Element element = (Element) paramslist.get(0);
String type = element.getAttributeValue("type");
String version = element.getAttributeValue("version");
JSONObject json = new JSONObject();
json.put("type", type);
json.put("version", version);
System.out.println("获取Message节点属性:" + json);
//获取具体Account节点值
path = "/Message/Head/Account";
xPath = XPath.newInstance(path);
paramslist = xPath.selectNodes(document);
element = (Element) paramslist.get(0);
String value = element.getText();
json.clear();
json.put("Account", value);
System.out.println("获取具体Account节点值:" + json);
//获取具体PassWord节点值
path = "/Message/Head/PassWord";
xPath = XPath.newInstance(path);
paramslist = xPath.selectNodes(document);
element = (Element) paramslist.get(0);
value = element.getText();
json.clear();
json.put("Account", value);
System.out.println("获取具体PassWord节点值:" + json);
//获取UserInfo节点下所有子节点值
path = "/Message/Body/UserInfo";
xPath = XPath.newInstance(path);
paramslist = xPath.selectNodes(document);
element = (Element) paramslist.get(0);
List children = element.getChildren();
json.clear();
for (int i = 0; i < children.size(); i++) {
String keyName = ((Element) children.get(i)).getName();//子节点
String keyValue = ((Element) children.get(i)).getText();//子节点值
json.put(keyName, keyValue);
}
System.out.println("获取UserInfo节点下所有子节点值:" + json);
//获取UserLimitedVo节点下的所有Code值,组成集合
path = "/Message/Body/UserLimited/UserLimitedVo";
xPath = XPath.newInstance(path);
paramslist = xPath.selectNodes(document);
Iterator it = paramslist.iterator();
List list = new ArrayList();
json.clear();
while (it.hasNext()) {
element = (Element) it.next();
list.add(element.getChildText("Code"));
}
json.put("Code", list);
System.out.println("获取UserLimitedVo节点下的所有Code值,组成集合:" + json);
} catch (Exception e) {
e.printStackTrace();
}
}
main()方法调用
public static void main(String[] args) {
parseXML();
}
输出
获取Message节点属性:{"type":"response","version":"1.0"}
获取具体Account节点值:{"Account":"zs"}
获取具体PassWord节点值:{"Account":"123456"}
获取UserInfo节点下所有子节点值:{"UserName":"张三","deptId":"01010301","CardID":"320481198204092420","Age":"23"}
获取UserLimitedVo节点下的所有Code值,组成集合:{"Code":["01","02","03"]}
读取XML(三)
xml字符串样例
<cas:serviceResponse
xmlns:cas='http://www.yale.edu/tp/cas'>
<cas:authenticationSuccess>
<cas:user>ADMIN</cas:user>
</cas:authenticationSuccess>
</cas:serviceResponse>
导入相应包
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.StringReader;
import java.util.regex.Pattern;
import static java.util.regex.Pattern.compile;
解析xml方法
public static void parseXML() {
String xml = "<cas:serviceResponse\n" +
" xmlns:cas='http://www.yale.edu/tp/cas'>\n" +
" <cas:authenticationSuccess>\n" +
" <cas:user>ADMIN</cas:user>\n" +
" </cas:authenticationSuccess>\n" +
"</cas:serviceResponse>";
String returnValue = "";
Pattern p = compile("\\s*|\t|\r|\n");
try {
DocumentBuilderFactory factory = DocumentBuilderFactory
.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder
.parse(new InputSource(new StringReader(xml)));
Element root = doc.getDocumentElement();
String xmlns = root.getAttribute("xmlns:cas");
System.out.println("xmlns:cas=" + xmlns);
NodeList nodeList = root
.getElementsByTagName("cas:authenticationSuccess");
if (nodeList != null) {
for (int i = 0; i < nodeList.getLength(); i++) {
Node _book = nodeList.item(i);
returnValue = p.matcher(_book.getTextContent()).replaceAll("");
}
}
System.out.println("user" + returnValue);
} catch (Exception e) {
e.printStackTrace();
}
}
输出结果
xmlns:cas=http://www.yale.edu/tp/cas
user:ADMIN
生成XML
生成xml样例
<?xml version="1.0" encoding="GBK"?>
<Message type="request" version="1.0">
<Head>
<Account>zs</Account>
<PassWord>123456</PassWord>
</Head>
<Body>
<UserInfo>
<UserName>张三</UserName>
<deptId>01010301</deptId>
<CardID>320481198204092420</CardID>
<Age>23</Age>
</UserInfo>
</Body>
</Message>
导入相应包
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import java.util.HashMap;
生成xml方法
public static void generateXml() {
String xml = "";
try {
//根节点
Element msgEl = new Element("Message");
msgEl.setAttribute("type", "request");
msgEl.setAttribute("version", "1.0");
Document doc = new Document(msgEl);
//单个赋值
Element headEl = new Element("Head");
Element accountEl = new Element("Account");
Element passWordEl = new Element("PassWord");
accountEl.setText("zs");
passWordEl.setText("123456");
headEl.addContent(accountEl);
headEl.addContent(passWordEl);
//循环赋值
Element bodyEl = new Element("Body");
Element userInfoEl = new Element("UserInfo");
HashMap<String, String> map = new HashMap();
map.put("UserName", "张三");
map.put("Age", "23");
map.put("CardID", "320481198204092420");
map.put("deptId", "01010301");
for (String key : map.keySet()) {
Element el = new Element(key);
el.setText(map.get(key));
userInfoEl.addContent(el);
}
bodyEl.addContent(userInfoEl);
msgEl.addContent(headEl);
msgEl.addContent(bodyEl);
XMLOutputter outputter = new XMLOutputter();
Format format = Format.getPrettyFormat();
format.setExpandEmptyElements(true);// must
format.setEncoding("GBK");
outputter.setFormat(format);
xml = outputter.outputString(doc);
System.out.println(xml);
} catch (Exception e) {
e.printStackTrace();
}
}
输出结果
<?xml version="1.0" encoding="GBK"?>
<Message type="request" version="1.0">
<Head>
<Account>zs</Account>
<PassWord>123456</PassWord>
</Head>
<Body>
<UserInfo>
<UserName>张三</UserName>
<deptId>01010301</deptId>
<CardID>320481198204092420</CardID>
<Age>23</Age>
</UserInfo>
</Body>
</Message>