针对上篇的九九乘法数据获取json数据转成xmL然后通过 XSLT在我们需要指定HTML页面样式

把九九乘法的数据添加到两个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"/>&#215;<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"/>&#215;<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>

最后的效果
在这里插入图片描述
在此还希望大家指点不足和改进.谢谢你指点.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值