把九九乘法的数据添加到两个json 对象中,然后把这两个json 对象给添加到一个json数组.比起上一篇字符串去拼接json的数据相对没有那么复制而且返回样式就是符串json 的数据格式把.所有通过这两篇大家可以根据情况比较选择自己适合就可以.
这个转发到 XMLShow 路径进行处理数
@RequestMapping(value = "/showjson")
public String getForJson(HttpServletResponse response, HttpServletRequest request) throws IOException {
JSONArray jsonArray = new JSONArray();
for (int i = 2; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
JSONObject jsonObject = new JSONObject();
//拆成三部分保存到json 对象中
jsonObject.put("k1", i);//乘数的 i
jsonObject.put("k2", j);乘数的 j
jsonObject.put("k3", i * j); 它们的乘积
jsonArray.put(jsonObject);
}
}
request.getSession().setAttribute("stu", jsonArray.toString()); //数据保存session中
return "forward:/XMLShow";
}
<--------------------------------------------接收转发过滤的数据进行处理------------------------------------------------------------------->
@RequestMapping(value = "/XMLShow")
public ModelAndView getshowXML(HttpServletResponse response, HttpServletRequest request) throws Exception {
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
Element documentElement = doc.createElement("document");
doc.appendChild(documentElement);
String attribute = (String) request.getSession().getAttribute("stu");//从session获取转发的数据
JSONArray jsonArray = new JSONArray(attribute);//把数据到json数组中
createDom(jsonArray,doc,documentElement);//自己封装的方法这个方法是创建把json 的数据转成xml 生产文档树
Source source = new DOMSource(doc);
ModelAndView model = new ModelAndView("multiplication");
model.addObject("xmlSource", source);
return model;//把数据渲染给前台
}
/**
* 获得json 的key
*
* @param objectJson
* @return
*/
public String[] getjsonValue(JSONObject objectJson) {
String[] arrString = new String[3];
//使用迭代器遍历 json 对象 拿到它的键和值
Iterator<String> keys = objectJson.keys();
for (int i = 0; i < objectJson.length(); i++) {
String next = keys.next();
arrString[i] = next;
}
return arrString;
}
/**
* 返回
*
* @param objectJson json数组
* @param i 元素下标
* @param pace 步距
* @param doc 文档
* @return
*/
public Element getElement(JSONArray objectJson, int i, int pace, Document doc) {
Element keElement = doc.createElement("key");
//调用 getjsonValue()封装的方法;
String[] jsonValue = getjsonValue(objectJson.getJSONObject(i + pace));
String[] keyValuString = getKeyValuString(objectJson.getJSONObject(i + pace));
for (int j = 0; j < jsonValue.length; j++) {
//判断是质数的情况添加属性
if ((jsonValue[j].equals("k3") && keyValuString[j].equals("2")) || (jsonValue[j].equals("k3") && keyValuString[j].equals("3")) || (jsonValue[j].equals("k3") && keyValuString[j].equals("5")) || (jsonValue[j].equals("k3") && keyValuString[j].equals("7"))) {
Element createElement1 = doc.createElement(jsonValue[j]);//创建节点
createElement1.setAttribute("is", "prime");
String createElement1Text = objectJson.getJSONObject(i + pace).get(jsonValue[j]).toString();
createElement1.appendChild(doc.createTextNode(createElement1Text));
keElement.appendChild(createElement1);
} else {
Element createElement1 = doc.createElement(jsonValue[j]);
String createElement1Text = objectJson.getJSONObject(i + pace).get(jsonValue[j]).toString();
createElement1.appendChild(doc.createTextNode(createElement1Text));
keElement.appendChild(createElement1);//追究子节点
}
}
return keElement;
}
/**
* 返回所json对象的值
*
* @param jsonObj
* @return
*/
public String[] getKeyValuString(JSONObject jsonObj) {
String[] arrValueString = new String[3];
Iterator<String> keys = jsonObj.keys();
for (int i = 0; i < jsonObj.length(); i++) {
String next = keys.next();
String jsonObjString = jsonObj.get(next).toString();
arrValueString[i] = jsonObjString;
}
return arrValueString;
}
/**
* 创建dom 拼接数据 生成xml 为后面的XSLT 转换使用
*
* @param jsonArray
* @param doc
* @param documentElement
*/
public void createDom( JSONArray jsonArray ,Document doc,Element documentElement){
for (int i = 0; i < 9; i++) {
Element keysElement = doc.createElement("keys");
Element element = getElement(jsonArray, i, 0, doc);
Element element1 = getElement(jsonArray, i, 9, doc);
Element element2 = getElement(jsonArray, i, 18, doc);
Element element3 = getElement(jsonArray, i, 27, doc);
keysElement.appendChild(element);
keysElement.appendChild(element1);
keysElement.appendChild(element2);
keysElement.appendChild(element3);
documentElement.appendChild(keysElement);
}
<------------------------------根据九九乘法的样式分出两边进行拼装-------------------------------------------------------->
for (int i = 0; i < 9; i++) {
Element keysElement = doc.createElement("keys");
Element element = getElement(jsonArray, i, 36, doc);
Element element1 = getElement(jsonArray, i, 45, doc);
Element element2 = getElement(jsonArray, i, 54, doc);
Element element3 = getElement(jsonArray, i, 63, doc);
keysElement.appendChild(element);
keysElement.appendChild(element1);
keysElement.appendChild(element2);
keysElement.appendChild(element3);
documentElement.appendChild(keysElement);
}
}
编写XSLT
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output version="1.0" indent="yes" encoding="UTF-8" method="html"/>
<xsl:template match="/">
<html>
<body>
<h2>XSLT 转换</h2>
<table border="1">
<xsl:for-each select="document/keys">
<tr>
<xsl:for-each select="key">
<xsl:choose>
<xsl:when test="k3/@is">
<td>
<xsl:value-of select="k1"/>×<xsl:value-of select="k2"/>=<span style="color:red ">
<xsl:value-of select="k3"/>
</span>
</td>
</xsl:when>
<xsl:otherwise>
<td>
<xsl:value-of select="k1"/>×<xsl:value-of select="k2"/>=<xsl:value-of select="k3"/>
</td>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
最后的效果
在此还希望大家指点不足和改进.谢谢你指点.