zoukankan      html  css  js  c++  java
  • ScriptTransformer

    ScriptTransformer可能由java支持的JavaScript语言或者其他脚本语言写成的转换器.只支持Java 6以上版本.

    例1:

    <dataConfig>
        <script><![CDATA[
                    function f1(row)        {
                        row.put('message', 'Hello World!');
                        return row;
                    }
            ]]></script>
        <document>
            <entity name="e" pk="id" transformer="script:f1" query="select * from X">
                ....
            </entity>
        </document>
    </dataConfig>

    例2:

    <dataConfig>
            <script><![CDATA[
                    function CategoryPieces(row)    {
                        var pieces = row.get('category').split('/');
                        var arr = new java.util.ArrayList();
                        for (var i=0; i<pieces.length; i++) {
                           arr.add(pieces[i]);
                        }
                        row.put('categorypieces', arr);
                        row.remove('category');
                        return row;
                    }
            ]]></script>
            <document>
                    <entity name="e" pk="id" transformer="script:CategoryPieces" query="select * from X">
                    ....
                    </entity>
            </document>
    </dataConfig>

    例3:

    <script><![CDATA[
            id = 1;
            function GenerateId(row) {
                row.put('id', (id ++).toFixed());
                return row;
            } 
            function WipOffHtml(row) {
                var file = row.get('file');
                row.put('file',file.substr(0,file.indexOf('.')));
                return row;
            }          
           ]]>
    </script>
    • 脚本标签放置在dataConfig节点里边, 默认情况下,该语言被认为是使用Javascript.如果想要使用其他语言,在script标签中指定属性language="MyLanguage".必须支持jdk1.6以上
    • 可以写你想要使用的尽可能多的transformer 函数.每个函数都必须接收row变量,对应于Map<String, Object> .并且返回row结果集.
    • 使用row.remove(keyname)删除条目.
    • 使用var arr = new java.util.ArrayList()为单个字段添加多个条目,不能使用JavaScript数组.
    • 文档为Java Map对象
    • 文档为Java ArrayList对象
    • 通过在实体中指定transformer="script:<function-name>",来使用函数生成条目.
    • 在上面的data-config中,实体e返回的每一个row都会执行一个f1函数.
    • 执行语法和java变压器一样,在抽象类Transformer中,transformRow(Map<String,Object> , Context context)中有两个参数,因为它是JavaScript的第二个参数,可以omittted,它仍然有效

     不当之处,敬请指正 ! 谢谢!

  • 相关阅读:
    3.4 抓取猫眼电影排行
    2.5 代理的基本原理
    第二章 爬虫基础
    1.8 爬虫框架的安装
    Python序列化
    CVE-2020-1938 Apache-Tomcat-Ajp漏洞复现
    Python定制类
    Apache Tomcat DDOS
    内网端口转发工具
    内网渗透思路简单介绍
  • 原文地址:https://www.cnblogs.com/a198720/p/4267603.html
Copyright © 2011-2022 走看看