<?xml version="1.0" encoding="UTF-8"?> <rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule"
><channel><title>Himmel &#187; xsl</title> <atom:link href="http://lazing.ave7.net/tag/xsl/feed/" rel="self" type="application/rss+xml" /><link>http://lazing.ave7.net</link> <description>时间很长；现在很短；距离很长；相遇很短</description> <lastBuildDate>Wed, 11 Jan 2012 18:03:14 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.2.1</generator> <creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license> <item><title>Java：利用XML生成Word文档</title><link>http://lazing.ave7.net/2008/java-generating-word-documents-using-xml/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=java-generating-word-documents-using-xml</link> <comments>http://lazing.ave7.net/2008/java-generating-word-documents-using-xml/#comments</comments> <pubDate>Sat, 01 Mar 2008 06:05:57 +0000</pubDate> <dc:creator>某L</dc:creator> <category><![CDATA[Tech Forge]]></category> <category><![CDATA[Java]]></category> <category><![CDATA[xml]]></category> <category><![CDATA[xsl]]></category><guid isPermaLink="false">http://lazing.ave7.net/blog/?p=242</guid> <description><![CDATA[Word 2003后提供了一种xml的文档格式。可以利用这一点方便的生成doc文档 Word 2007更完全使用xml与数据压缩包的方式存储，使得用类似的方法处理附件也变为可能。 相关demo下载 doc-creator 概述 实现步骤如下： 定义Word文档样式，存为xml文档。 定义数据xml格式，生成样本数据。 修改word文档样式xml文件，制作xsl模板文件。 编程实现：数据-&#62;xml数据-&#62;模板转换-&#62;doc文档 创建模板 打开Word文档，另存为：Word 2003 xml格式。 使用xsl编辑器 （如 Stylus Studio）或手工编辑，创建XSL模板 。 相关XSL问题可以参考 http://www.w3schools.com/xsl/ 利用dom4j处理相关xml操作 下面是一些基础实现方法 /* * (non-Javadoc) * * @see cn.ccb.sarm.bizprocess.assetdeal.exam.approve.bizservice.IWfConferenceBS#writeXML(java.io.OutputStream, * cn.ccb.sarm.bizprocess.assetdeal.exam.approve.common.bo.TaskVO, * java.util.List, cn.ccb.sarm.common.model.bo.WfConferenceBO, * cn.ccb.sarm.common.model.bo.WfConfBpBO) */ public void writeXML(OutputStream output, TaskVO task, List opinionList, WfConferenceBO conf, WfConfBpBO confBP) throws IOException, IllegalAccessException, <a href="http://lazing.ave7.net/2008/java-generating-word-documents-using-xml/"> read more <span class="meta-nav">&#187;</span></a><br /><div><img src="http://lazing.ave7.net/wp-content/plugins/gd-star-rating/gfx.php?value=0.0" /></div><div>Rating: 0.0/<strong>5</strong> (0 votes cast)</div><br />]]></description> <content:encoded><![CDATA[<p>Word 2003后提供了一种xml的文档格式。可以利用这一点方便的生成doc文档</p><p>Word 2007更完全使用xml与数据压缩包的方式存储，使得用类似的方法处理附件也变为可能。</p><h4>相关demo下载 <a href="http://lazing.ave7.net/">doc-creator</a></h4><h4>概述</h4><p>实现步骤如下：</p><ol><li>定义Word文档样式，存为xml文档。</li><li>定义数据xml格式，生成样本数据。</li><li>修改word文档样式xml文件，制作xsl模板文件。</li><li>编程实现：数据-&gt;xml数据-&gt;模板转换-&gt;doc文档</li></ol><h4>创建模板</h4><p>打开Word文档，另存为：Word 2003 xml格式。</p><p>使用xsl编辑器 （如 Stylus Studio）或手工编辑，创建XSL模板 。</p><pre class="xml">
   

   </pre><p>相关XSL问题可以参考 <a href="http://www.w3schools.com/xsl/">http://www.w3schools.com/xsl/</a></p><h4>利用dom4j处理相关xml操作</h4><p>下面是一些基础实现方法</p><pre class="java">    /*
     * (non-Javadoc)
     *
     * @see cn.ccb.sarm.bizprocess.assetdeal.exam.approve.bizservice.IWfConferenceBS#writeXML(java.io.OutputStream,
     *      cn.ccb.sarm.bizprocess.assetdeal.exam.approve.common.bo.TaskVO,
     *      java.util.List, cn.ccb.sarm.common.model.bo.WfConferenceBO,
     *      cn.ccb.sarm.common.model.bo.WfConfBpBO)
     */
    public void writeXML(OutputStream output, TaskVO task, List opinionList, WfConferenceBO conf,
            WfConfBpBO confBP) throws IOException, IllegalAccessException,
            InvocationTargetException, NoSuchMethodException {
        Document doc = DocumentHelper.createDocument();
        Element root = doc.addElement("conference");
        Element taskNode = root.addElement("task");
        addBeanProp(task, taskNode);
        Element confNode = root.addElement("conferenceInfo");
        addBeanProp(conf, confNode);
        Element confBpNode = root.addElement("confBPInfo");
        addBeanProp(confBP, confBpNode);
        Element approveNode = root.addElement("approvers");

        addListMapEntry(opinionList, approveNode);

        XMLWriter writer = new XMLWriter(output);
        writer.write(doc);

    }

    /**
     * 转换list对象为多个元素
     *
     * @param list
     *            对象list
     * @param node
     *            父节点
     */
    private void addListMapEntry(List list, Element node) {
        Iterator it = list.iterator();
        while (it.hasNext()) {
            Map map = (Map) it.next();
            Element approveNode = node.addElement("approver");
            addMapEntry(map, approveNode);
        }
    }

    /**
     * 转换bean为xml
     *
     * @param bean
     *            对象bean
     * @param node
     *            父节点
     * @throws IllegalAccessException
     * @throws InvocationTargetException
     * @throws NoSuchMethodException
     */
    private void addBeanProp(Object bean, Element node) throws IllegalAccessException,
            InvocationTargetException, NoSuchMethodException {
        Map propMap = BeanUtils.describe(bean);
        addMapEntry(propMap, node);
    }

    /**
     * 转换map对象为xml
     *
     * @param map
     *            数据对象
     * @param node
     *            父节点
     */
    private void addMapEntry(Map map, Element node) {
        Set entrySet = map.entrySet();
        Iterator it = entrySet.iterator();
        while (it.hasNext()) {
            Map.Entry e = (Entry) it.next();
            node.addElement(e.getKey().toString()).addText(
                    (e.getValue() == null ? "" : e.getValue().toString()));
        }
    }

    /*
     * (non-Javadoc)
     *
     * @see cn.ccb.sarm.bizprocess.assetdeal.exam.approve.bizservice.IWfConferenceBS#transformDocument(java.io.OutputStream,
     *      java.io.FileInputStream, java.io.FileInputStream)
     */
    public void transformDocument(OutputStream out, InputStream data, InputStream template)
            throws TransformerException {
        TransformerFactory factory = TransformerFactory.newInstance();
        Transformer transform = factory.newTransformer(new StreamSource(template));

        Result result = new StreamResult(out);
        transform.transform(new StreamSource(data), result);
    }</pre><p>测试代码</p><pre class="java">    public void testWriteXML() throws Exception {
        IWfConferenceBS conferenceBS = new WfConferenceBS();
        TaskVO task = new TaskVO();
        task.setBizTypeName("测试业务类型");
        List opinionList = new ArrayList();
        Map m = new HashMap();
        m.put("userName", "testUser");
        m.put("userConfRole", "testUserRole");
        m.put("approverOpinion", "approverOpinion");
        m.put("lastChangeTime", "time");
        opinionList.add(m);
        WfConferenceBO conf = new WfConferenceBO();
        conf.setConfPlace("place");
        WfConfBpBO confBP = new WfConfBpBO();
        confBP.setConfResult("testResult");
        confBP.setConfOpinion("confOpinion");
        File tempOutputFile = File.createTempFile("specialApproveTemp", ".xml");
        OutputStream output = new FileOutputStream(tempOutputFile);
        conferenceBS.writeXML(output, task, opinionList, conf, confBP);
        output.flush();
        output.close();

        OutputStream out = new FileOutputStream(File.createTempFile("specialApproveTemp", ".doc"));
        File template = ResourceUtils
                .getFile("classpath:cn/ccb/clpm/wf/common/specialApproveTemplate.xsl");
        conferenceBS.transformDocument(out, new FileInputStream(tempOutputFile),
                new FileInputStream(template));
        output.flush();
        output.close();

    }</pre><ul><li><a href="http://lazing.ave7.net/2008/maven-need-to-act-as-wikipedia/" rel="bookmark" title="2008/05/23">Maven need to act as Wikipedia</a></li><li><a href="http://lazing.ave7.net/2007/junit-unit-testing-and-integration-testing-guidelines/" rel="bookmark" title="2007/12/15">JUnit单元测试与集成测试指引</a></li><li><a href="http://lazing.ave7.net/2007/xfire-and-spring-development-of-the-use-of-web-services/" rel="bookmark" title="2007/12/29">使用XFire与Spring开发Web Services</a></li><li><a href="http://lazing.ave7.net/2007/java-module-and-maven/" rel="bookmark" title="2007/12/06">Java Module and Maven</a></li><li><a href="http://lazing.ave7.net/2007/preamble-lazingu002639s-java-guide/" rel="bookmark" title="2007/06/23">序言 &#8211; Lazing&#8217;s Java Guide</a></li></ul><p></p><p><a href="http://www.bshare.cn/share?url=http%3A%2F%2Flazing.ave7.net%2F2008%2Fjava-generating-word-documents-using-xml%2F&title=Java%EF%BC%9A%E5%88%A9%E7%94%A8XML%E7%94%9F%E6%88%90Word%E6%96%87%E6%A1%A3" title="用bShare分享或收藏本文"><img src="http://static.bshare.cn/frame/images/button_custom1-zh.gif" alt="用bShare分享或收藏本文" /></a></p><br /><div><img src="http://lazing.ave7.net/wp-content/plugins/gd-star-rating/gfx.php?value=0.0" /></div><div>Rating: 0.0/<strong>5</strong> (0 votes cast)</div><br /> <img src="http://lazing.ave7.net/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=242" width="1" height="1" style="display: none;" />]]></content:encoded> <wfw:commentRss>http://lazing.ave7.net/2008/java-generating-word-documents-using-xml/feed/</wfw:commentRss> <slash:comments>11</slash:comments> <creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license> </item> <item><title>Dynamic Language and DSL</title><link>http://lazing.ave7.net/2007/dynamic-language-and-dsl/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=dynamic-language-and-dsl</link> <comments>http://lazing.ave7.net/2007/dynamic-language-and-dsl/#comments</comments> <pubDate>Thu, 29 Nov 2007 12:54:40 +0000</pubDate> <dc:creator>某L</dc:creator> <category><![CDATA[Tech Forge]]></category> <category><![CDATA[aop]]></category> <category><![CDATA[dsl]]></category> <category><![CDATA[Java]]></category> <category><![CDATA[ruby]]></category> <category><![CDATA[xml]]></category> <category><![CDATA[xsl]]></category><guid isPermaLink="false">http://lazing.ave7.net/blog/?p=199</guid> <description><![CDATA[这是一篇技术评论，呃，请自行掠过 早上拜读了Martin Fowler老人家的BLOG Groovy or Ruby ，兴致勃勃的看这个时尚的家伙对动态语言的高谈阔论。下午就在InfoQ看到了对其新书的点评——Martin Fowler unveils details of his upcoming DSL book. 两样东西放到一起很有意思。动态语言与领域语言(Domain-Specific Language)。 MF的书中是这样介绍的。 如果我们把XSLT看成是专门格式化XML的语言，那么XSLT就是XML的DSL。 那么DSL有什么用呢？ 根据MF的论述 Domain-Specific Language DSL与通用语言相区别，是为特定目的而生的语言，它并不是什么新东西，历史几乎和计算机的历史一样长。 比如Windows的批处理文件，再比如HTML（某种意义上）。处理它们的程序和普通的应用程序不一样，这些程序并不知道这些语言具体描述了什么，却知道他们到最后大概是什么样子。但我们也不能把这些应用程序归结为系统程序，毕竟，你不能用这些动态语言写成任何一个通常意义上的程序。这些语言轻巧灵活，惹人喜爱，却长期处于没人在乎的地位。几乎没有任何一个大学开设JavaScript或者BAT的课程。然而，用它们开发的程序铺天盖地，甚至有些开发者都没有意识到他们在写程序。 我们到底有多少DSL，没有人说的清楚，甚至怎么界定都没有标准。然而这种工具的确越来越受重视。大型的软件通常都有自己的工具语言，比如SAP，比如PepleSoft，比如MathLib，比如SAS，掌握这些工具通常意味着熟练应用这些语言与相关的领域知识。而由于他们之间毫无联系，同种软件之间有着高昂的替换成本。变相垄断使得DSL由最初的简化用户操作变成了对抗新来者的武器。 标准化是由混乱走向秩序的利器。工业化也是软件行业一直追求的目标。让我们看看工业界是怎么做的，他们拥有流水线，有很好的设计，生产，销售流程。我们常常抱怨软件的变化，生产没有变化吗？现在工业可以高效的适应变化，依靠的就是对领域的深切理解，对规则的灵活掌握。 对标准的无尽追寻是业界走向成熟的重要标志。不妨设想，今后的某天，所有的财务软件都有统一的口径标准，统一的数据格式处理流程。集团化，高质量的软件生产和部署使我们更加有序的获取所需的功能。然而这一切，依靠的就是对DSL领域的入侵。Ruby的流行正式反映了这种入侵，当其追逐者不断的在各种平台上实现这门语言的时候，我们也看到了传统语言正积极的调整。Java向.net学习多语言支持。.net努力的靠近开源社区的标准。 我们说GOP，说AOP，无非就是想把领域问题(Domain Problem)从应用问题里面解离，我们需要成熟的软件产品，需要的是真正模块化的组件，而不是某个既成事实。被巨头们忽悠着团团转的我们，也只能等到他们被迫合作的时候，才能轻松一点。 教学贴：如何编写Maven2插件 从Twitter等看企业软件架构（一） Java：利用XML生成Word文档 JUnit单元测试与集成测试指引 Maven need to act as Wikipedia Rating: 0.0/5 (0 votes cast)<br /><div><img src="http://lazing.ave7.net/wp-content/plugins/gd-star-rating/gfx.php?value=0.0" /></div><div>Rating: 0.0/<strong>5</strong> (0 votes cast)</div><br />]]></description> <content:encoded><![CDATA[<blockquote><p>这是一篇技术评论，呃，请自行掠过</p></blockquote><p>早上拜读了Martin Fowler老人家的BLOG <a href="http://martinfowler.com/bliki/GroovyOrJRuby.html">Groovy or Ruby</a> ，兴致勃勃的看这个时尚的家伙对动态语言的高谈阔论。下午就在InfoQ看到了对其新书的点评——<a href="http://www.infoq.com/news/2007/11/martin-fowler-dsl-book">Martin Fowler unveils details of his upcoming DSL book</a>. 两样东西放到一起很有意思。动态语言与领域语言(Domain-Specific Language)。</p><p>MF的书中是这样介绍的。</p><blockquote><p>如果我们把XSLT看成是专门格式化XML的语言，那么XSLT就是XML的DSL。</p></blockquote><p>那么DSL有什么用呢？</p><p>根据MF的论述 <a href="http://martinfowler.com/bliki/DomainSpecificLanguage.html">Domain-Specific Language</a></p><blockquote><p>DSL与通用语言相区别，是为特定目的而生的语言，它并不是什么新东西，历史几乎和计算机的历史一样长。</p></blockquote><p>比如Windows的批处理文件，再比如HTML（某种意义上）。处理它们的程序和普通的应用程序不一样，这些程序并不知道这些语言具体描述了什么，却知道他们到最后大概是什么样子。但我们也不能把这些应用程序归结为系统程序，毕竟，你不能用这些动态语言写成任何一个通常意义上的程序。这些语言轻巧灵活，惹人喜爱，却长期处于没人在乎的地位。几乎没有任何一个大学开设JavaScript或者BAT的课程。然而，用它们开发的程序铺天盖地，甚至有些开发者都没有意识到他们在写程序。</p><p>我们到底有多少DSL，没有人说的清楚，甚至怎么界定都没有标准。然而这种工具的确越来越受重视。大型的软件通常都有自己的工具语言，比如SAP，比如PepleSoft，比如MathLib，比如SAS，掌握这些工具通常意味着熟练应用这些语言与相关的领域知识。而由于他们之间毫无联系，同种软件之间有着高昂的替换成本。变相垄断使得DSL由最初的简化用户操作变成了对抗新来者的武器。</p><p>标准化是由混乱走向秩序的利器。工业化也是软件行业一直追求的目标。让我们看看工业界是怎么做的，他们拥有流水线，有很好的设计，生产，销售流程。我们常常抱怨软件的变化，生产没有变化吗？现在工业可以高效的适应变化，依靠的就是对领域的深切理解，对规则的灵活掌握。</p><p>对标准的无尽追寻是业界走向成熟的重要标志。不妨设想，今后的某天，所有的财务软件都有统一的口径标准，统一的数据格式处理流程。集团化，高质量的软件生产和部署使我们更加有序的获取所需的功能。然而这一切，依靠的就是对DSL领域的入侵。Ruby的流行正式反映了这种入侵，当其追逐者不断的在各种平台上实现这门语言的时候，我们也看到了传统语言正积极的调整。Java向.net学习多语言支持。.net努力的靠近开源社区的标准。</p><p>我们说GOP，说AOP，无非就是想把领域问题(Domain Problem)从应用问题里面解离，我们需要成熟的软件产品，需要的是真正模块化的组件，而不是某个既成事实。被巨头们忽悠着团团转的我们，也只能等到他们被迫合作的时候，才能轻松一点。<ul><li><a href="http://lazing.ave7.net/2008/java-generating-word-documents-using-xml/" rel="bookmark" title="2008/03/01">Java：利用XML生成Word文档</a></li><li><a href="http://lazing.ave7.net/2008/summary-of-the-seven-streets-in-the-development-of-the-progress-of-the-new-080913/" rel="bookmark" title="2008/09/13">新七街开发进度小结 080913</a></li><li><a href="http://lazing.ave7.net/2008/spring-25-aop-schema-urinate-programming/" rel="bookmark" title="2008/02/22">Spring 2.5 AOP Schema编程小解</a></li><li><a href="http://lazing.ave7.net/2011/ruby-on-rails-installation-error-one-case/" rel="bookmark" title="2011/05/09">Ruby on Rails 安装错误一例</a></li><li><a href="http://lazing.ave7.net/2007/xfire-and-spring-development-of-the-use-of-web-services/" rel="bookmark" title="2007/12/29">使用XFire与Spring开发Web Services</a></li></ul><p></p><p><a href="http://www.bshare.cn/share?url=http%3A%2F%2Flazing.ave7.net%2F2007%2Fdynamic-language-and-dsl%2F&title=Dynamic+Language+and+DSL" title="用bShare分享或收藏本文"><img src="http://static.bshare.cn/frame/images/button_custom1-zh.gif" alt="用bShare分享或收藏本文" /></a></p><br /><div><img src="http://lazing.ave7.net/wp-content/plugins/gd-star-rating/gfx.php?value=0.0" /></div><div>Rating: 0.0/<strong>5</strong> (0 votes cast)</div><br /> <img src="http://lazing.ave7.net/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=199" width="1" height="1" style="display: none;" />]]></content:encoded> <wfw:commentRss>http://lazing.ave7.net/2007/dynamic-language-and-dsl/feed/</wfw:commentRss> <slash:comments>4</slash:comments> <creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license> </item> </channel> </rss>
