SyntaxHighlighter2.1.364动态代码高亮

应用场景为,一个file选择上传一个xml,然后点击预览。此时是先上传xml到服务器,然后读取xml并格式化返回json数据,然后获取该json,加载到页面之后,用SyntaxHighlighter插件动态高亮该段上传的xml代码。关键代码如下:

首先是文件上传并重命名,随后把上传之后的文件格式化转为json。代码如下:

@RequestMapping(value = "fileUpload.s", method = RequestMethod.POST)
//    public String fileUpload(@RequestParam("file") MultipartFile file) {
    public void fileUpload(HttpServletResponse response,HttpServletRequest request) {
        WebResult result=new WebResult();
        result.setResult(WebResult.WEB_RESULT_FAIL);

        MultipartHttpServletRequest  multipartHttpServletRequest= (MultipartHttpServletRequest) request;
//        MultipartHttpServletRequest  multipartHttpServletRequest= new DefaultMultipartHttpServletRequest(request);
        MultipartFile file=multipartHttpServletRequest.getFile("exmlPath");

        String filename=new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+file.getOriginalFilename().substring(file.getOriginalFilename().indexOf('.'));
        // 判断文件是否为空
        if (!file.isEmpty()) {
            try {
                // 文件保存路径
                String filePath = request.getSession().getServletContext().getRealPath("/") + getPicUpload()+ filename;
                File dirPath = new File(request.getSession().getServletContext().getRealPath("/") + getPicUpload());
                if (!dirPath.exists()) {
                    dirPath.mkdirs();
                }
                // 转存文件
                file.transferTo(new File(filePath));
//                    Resource res=new ServletContextResource(ContextLoader.getCurrentWebApplicationContext().getServletContext(),"/upload/type.xml");
                Resource res=new ServletContextResource(request.getSession().getServletContext(),getPicUpload()+filename);
                InputStream stream=res.getInputStream();
                BufferedReader br=new BufferedReader(new InputStreamReader(stream,"gbk"));
                String temp=null;
                StringBuffer sb=new StringBuffer();
                temp=br.readLine();
                while(temp!=null){
                    sb.append(temp);
                    temp=br.readLine();
                }

                try {
                    JsonGenerator generator = objectMapper.getJsonFactory().createJsonGenerator(response.getOutputStream(), JsonEncoding.UTF8);
                    result.setName(filename);
                    result.setReason(XmlFormat.format(sb.toString()));
                    result.setResult(WebResult.WEB_RESULT_SUCCESS);
                    objectMapper.writeValue(generator, result);
                } catch (IOException e) {
                    logger.error("Upload failed: JSON convertion error.");
                }
            } catch (Exception e) {
//                e.printStackTrace();
                logger.error("文件上传错误!错误详情为:"+e.getLocalizedMessage());
            }
        }

    }

格式化的代码如下:

	public class XmlFormat {

	    public static String format(String str){
	        // System.out.println(" str :  " + str);

	        SAXReader reader = new SAXReader();
	        // System.out.println(reader);
	        // 注释:创建一个串的字符输入流
	        StringReader in = new StringReader(str);
            StringWriter out = null;
            try {
                Document doc = reader.read(in);
                // System.out.println(doc.getRootElement());
                // 注释:创建输出格式
                OutputFormat formater = OutputFormat.createPrettyPrint();
                //formater=OutputFormat.createCompactFormat();
                // 注释:设置xml的输出编码
                formater.setEncoding("utf-8");
                // 注释:创建输出(目标)
                out = new StringWriter();
                // 注释:创建输出流
                XMLWriter writer = new XMLWriter(out, formater);
                // 注释:输出格式化的串到目标中,执行后。格式化后的串保存在out中。
                writer.write(doc);

                writer.close();
            } catch (DocumentException e) {
//                e.printStackTrace();
                return "xml格式错误,请仔细检查!详细信息为:"+e.getLocalizedMessage();
            } catch (IOException e) {
//                e.printStackTrace();
                return  "上传IO错误,请仔细检查!详细信息为:"+e.getLocalizedMessage();
            }
            // 注释:返回我们格式化后的结果
	        return out.toString();
	    }

	    public static void main(String[] args) throws Exception {
	        String head="<?xml version=\"1.0\" encoding=\"GBK\"?>";
	        String str = "<RequestData><HeadData><UserCode>sh1_admin</UserCode><UserName>sh1_admin</UserName><UserCompanyCode>3107</UserCompanyCode><UserCompanyName>上海分公司一部</UserCompanyName><RequestType>03</RequestType></HeadData><BodyData><ReportId>113100000033</ReportId><Insurant>a5rfg87</Insurant><NumberPlate>沪E78612</NumberPlate><EngineModel></EngineModel><CarVin></CarVin><AccidentDate>2011-02-25 15:07:00</AccidentDate><ReportDate>2011-02-25 15:07:00</ReportDate><Province>310000</Province><City>310100</City><District></District><AccidentPlace>1</AccidentPlace><AccidentLongitude></AccidentLongitude><AccidentLatitude></AccidentLatitude><SurveyLongitude></SurveyLongitude><SurveyLatitude></SurveyLatitude><SceneReportFlag></SceneReportFlag><Reporter></Reporter><ReporterTel></ReporterTel><SurveyPlace></SurveyPlace><OperatorId>3525</OperatorId><OperatorName>sh_admin</OperatorName><ReportDealId>30000800</ReportDealId><ReportDealName>江苏分公司</ReportDealName><CompanyName></CompanyName><CustomerTypeCode></CustomerTypeCode><ForcePolicyId>a5rfg87a5rfg87a5rfg87</ForcePolicyId><BizPolicyId></BizPolicyId><Index>0</Index><FieldName>5</FieldName></BodyData></RequestData>";
	        // System.out.println(str);
	        format(str);
	    }

	}

随后,页面上使用ajaxFileUpload插件,ajax上传选中的xml并接受服务端返回的json,代码如下:

jQuery.ajaxFileUpload({
            url:'fileUpload.s',
            secureuri:false,
            fileElementId:'exmlPath',
            dataType:'JSON',
            success:function(data,status){
            //多次选择文件上传时,需先清空xmlPre这个div的html内容,否则SyntaxHighlighter渲染之后的html不会变
                jQuery("#xmlPre").html("<div><pre id='xmlcontnt' class='brush: xml;'></pre></div>");
                jQuery("#xmlPre").removeAttr("style","");
                jQuery("#xmlPre").removeAttr("class","");
            //-----------------------------------------------------------------------

                data=jQuery.parseJSON(jQuery(data).text());  //转化ajaxFileUpload插件返回的json,它会包裹一个pre标签
                if(data.result==0){
                    $("#xmlname").val(data.name);
//                    alert(data.reason);
//                    console.log(data.reason);
                    $("#xmlcontnt").text(data.reason);    //将json格式的xml放入页面空的div中
                    SyntaxHighlighter.highlight();         //调用插件的高亮方法,渲染高亮
                    jQuery("#xmlPre").dialog({            //高亮后的代码所在div页面,以弹出层方式弹出,用以预览
                        minHeight: 300, width: 650,
                        position: "top", title: "上传xml预览" });
                    jQuery("#xmlPre").dialog('open');

//                    $('.theme-popover-mask').fadeIn(100);
//                    $('.theme-popover').slideDown(200);

                }else if(data.result==1){
                    alert("上传失败!");
                }else{
                    alert("未知错误!");
                }

            },
            error:function (s, xml, status, e) {
                alert(s, xml, status, e)
            }
        });

弹出层的页面代码:

<div id="xmlPre" style="display:none;border: 1">

    <pre >
        <pre id="xmlcontnt" class="brush: xml;">

        </pre>
    </pre>

</div>

SyntaxHighlighter2.1.364动态代码高亮

时间: 2024-10-18 21:53:15

SyntaxHighlighter2.1.364动态代码高亮的相关文章

[Html]Jekyll 代码高亮的几种选择

序 新年第一炮,轻松加愉快的,来完成一些年前准备写的文章.Jekyll 中格式化代码有很多种方式,在这里说说几种的实现方式. Jekyll Jekyll 是一种通过模版和数据编译为HTML的工具,说是工具,但是也可以说是服务,如果借助Github(搭建有Jekyll服务,可以实时编译)可以做出半动态网页:对于没有自己服务器的朋友来说是不错的选择. 一般情况下,使用Github+Jekyll来搭建博客和一些说明性质的网页. 之前有发表WIN系统下搭建的文章:[环境搭建]Windows下安装Ruby

代码高亮插件SyntaxHighlighter

一 第一 解压压缩包,scripts文件夹中包含了各种语言的JS文件,在styles文件夹中是各种显示高亮的主题 第二 如何使用?首先要引入其核心javascript文件shCore.js和核心CSS文件shCore.css,这两个是必选要引入的.其次引入你要高亮的语言JS,比如我想高亮显示的是C#,那么必须引入在scripts文件夹中的shBrushCSharp.js,最后引入高亮显示的主题CSS,默认的为shThemeDefault.css 第三 下面以高亮显示JavaScript代码为例讲

华丽丽的在线代码高亮组件CodeMirror

偷懒为码农天性之一:能一蹴而就的决不愚公移山,能一劳永逸的决不孜孜不倦!其中一个代码实例就是 动态配置,将不同的场景抽象成通用逻辑加配置,这样就可以"一处代码供全球,不做代码搬运工",更有甚者是把特殊的代码也变成是动态加载(比如用Groovy, Clojure去做动态加载).当配置动态代码时,总得把代码上传到服务器,如果代码是通过贴到上传页面的话,Textarea里的代码可没有IDE下那么婀娜多姿,要想好看就得想办法!在线代码高亮组件 正在灯火阑珊处.... 在线代码高亮组件有很多,特

【highlight.js】页面代码高亮插件

[highlight.js] 很多博客都支持页面插入各种语言的代码,而这些代码肯定是有高亮设置的.那么在我们自己的页面上如何进行代码高亮设置?有现成的这个highlight.js插件我们可以使用. highlight.js的官网是[https://highlightjs.org/]可以去上面下载插件.如果习惯用cdn可以百度一下怎么用cdn的方法来引用相关文件,我这里就把这个包下载到本地来了. ■ 简单用法 简单的用法我们主要用到了highlight/highligh.pack.js这个js文件

一个博客园代码高亮的方案

前言 博客园虽然可定制度高,但是在代码高亮这一块做的并不是很好,默认的配色方案看着很不舒服,而且影响页面的整体协调感. 但正因为博客园的可定制度高,所以我们可以自定义代码高亮的风格. 使用纯 CSS 实现,不需要 JS 权限. 关于博客园的插入代码 本章节只针对博客园的 TinyMce 编辑器讨论,我没有测试其他编辑器(例如 Markdown)的代码高亮解析方案. 博客园的插入代码是有两种方案的. 如图所示. 两种插入代码使用的高亮解析方案不同,各有利弊.我对两种方案都做了适配. 我个人推荐使用

Word 代码高亮

整理文档比较费事,提供个脚本放在VBA里,使Word 代码高亮的一种方法是改变颜色 'script to high light code In document Private Function isKeyword(w) As Boolean Dim keys As New Collection With keys .Add "onStart": .Add "Log": .Add "volatile": .Add "friend&quo

highlight.js 代码高亮插件的使用

在网页使用过程中,经常会用到代码的展示.而不同颜色的代码,可以让代码看起来更直观,也更美观. 找了几个不同的插件,觉得highlight的插件比较实用,而且用起来炒鸡简单. 比如这样: 首先,我们先下载一个highlight的js文件. https://highlightjs.org/ 点击get version按钮进入语言选择 勾选你常用的语言,在使用插件时会自动检测你要展示的代码的语言,并自动让代码高亮.通常common就足够用了. 然后点击下面的download按钮,下载,解压,里面会有j

使用prismjs为网站添加代码高亮功能

prismjs 是一款轻量.可扩展的代码语法高亮库,使用现代化的 Web 标准构建,使用 Prismjs 可以快速为网站添加代码高亮功能,支持超过113中编程语言,还支持多种插件,是简洁.高效的代码高亮解决方案.科技爱好者博客就是使用了Prism.js 实现漂亮的代码语法高亮功能,本文教你如何在wordpress上快速使用Prismjs实现代码高亮. 一.下载JS和CSS文件并上传到网站根目录. 在Prismjs网站下载页面下载需要的JS和CSS文件,下载页面: http://prismjs.c

Lyx输入中文与代码高亮

如果您看了我的这个随笔:<OpenSUSE 13.2安装Texlive2014+Texmaker+Lyx> (一)LyX中文 打开Lyx直接新建开始使用,那么输入的中文会是编译失败的,疑?为什么它的说明文档和教程编译都没有问题... 原因即在于每个文档的配置都是不同的.你可以打开“帮助 - Lyx介绍”,自己也新建一个文件.然后打开“文档 - 首选项”.会发现配置是不同的.如果对着实例改,那么就可以运行中文了,不过还是会有很多的地方,莫名其妙的编译不过,可能是还有些什么设置我没有去改,刚刚接触