js怎么把XML转化成字符串赋值表达式?

yezis 2013-07-09 04:44:59
比如:

吧<name>asd</name>XML转化成String name="asd";
...全文
266 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 11 楼 wohuifude123 的回复:
[quote=引用 10 楼 qinlei812810 的回复:] [quote=引用 7 楼 wohuifude123 的回复:] [quote=引用 5 楼 qinlei812810 的回复:] 呵呵呵,我在想,是不是发个远程我帮你写呢?呵呵呵
现在服务这么到位?还远程帮助写代码,以后帮我写代码如何?我用分数换。[/quote] 呵呵呵,你还真敢想啊...[/quote]一般都是回个帖就找不到人了,这还远程,服务确实到位,3#那代码页很好,所以求帮写代码啊[/quote] 老实说,哥也是小菜鸟,出自某鸟培训机构,没文凭,没经验,没技术,没房,没车,还没钱,属全霉人
  • 打赏
  • 举报
回复
呵呵呵,我在想,是不是发个远程我帮你写呢?呵呵呵
Jake443403168 2013-07-10
  • 打赏
  • 举报
回复
引用 3 楼 qinlei812810 的回复:
真心不晓得你xml是个什么结构

<script type="text/javascript">
        var XMLdoc;
        function loadXML() {
            if (window.ActiveXObject)
            {
                XMLdoc = new ActiveXObject("Microsoft.XMLDOM");

                XMLdoc.async = false;
                XMLdoc.load("abc.xml"); 
                getmessage();
            }
            setTimeout("loadXML()", 1000);  //呵呵呵,玩玩你
        }

        function getmessage() {
            var s = XMLdoc.getElementsByTagName("name")[0].childNodes[0].nodeValue;
            alert(s);
        }
    </script>
    </head>
        <body onload="loadXML()">
下面是abc.xml

<?xml version="1.0" encoding="utf-8" ?>
<measure>
    <name>0.0</name>
</measure>
参考参考
加上考虑浏览器兼容的部分就更好了
  • 打赏
  • 举报
回复
真心不晓得你xml是个什么结构

<script type="text/javascript">
        var XMLdoc;
        function loadXML() {
            if (window.ActiveXObject)
            {
                XMLdoc = new ActiveXObject("Microsoft.XMLDOM");

                XMLdoc.async = false;
                XMLdoc.load("abc.xml"); 
                getmessage();
            }
            setTimeout("loadXML()", 1000);  //呵呵呵,玩玩你
        }

        function getmessage() {
            var s = XMLdoc.getElementsByTagName("name")[0].childNodes[0].nodeValue;
            alert(s);
        }
    </script>
    </head>
        <body onload="loadXML()">
下面是abc.xml

<?xml version="1.0" encoding="utf-8" ?>
<measure>
    <name>0.0</name>
</measure>
参考参考
yezis 2013-07-10
  • 打赏
  • 举报
回复
引用 1 楼 wzs_xyz 的回复:
服务端语言环境应该会提供xml操作的类吧,直接从xml中把需要的值读出来赋值就行了
我想知道 仅仅在客户端使用JS内容那个提取XML标签<>中的元素吗?
wohuifude123 2013-07-10
  • 打赏
  • 举报
回复
引用 10 楼 qinlei812810 的回复:
[quote=引用 7 楼 wohuifude123 的回复:] [quote=引用 5 楼 qinlei812810 的回复:] 呵呵呵,我在想,是不是发个远程我帮你写呢?呵呵呵
现在服务这么到位?还远程帮助写代码,以后帮我写代码如何?我用分数换。[/quote] 呵呵呵,你还真敢想啊...[/quote]一般都是回个帖就找不到人了,这还远程,服务确实到位,3#那代码页很好,所以求帮写代码啊
  • 打赏
  • 举报
回复
引用 7 楼 wohuifude123 的回复:
[quote=引用 5 楼 qinlei812810 的回复:] 呵呵呵,我在想,是不是发个远程我帮你写呢?呵呵呵
现在服务这么到位?还远程帮助写代码,以后帮我写代码如何?我用分数换。[/quote] 呵呵呵,你还真敢想啊...
UEAnswer 2013-07-10
  • 打赏
  • 举报
回复
js解析xml成对象,可以从node、parentnode的角度考虑吧?Xhtml也是一种xml的形式啊。
likeajin 2013-07-10
  • 打赏
  • 举报
回复
wohuifude123 2013-07-10
  • 打赏
  • 举报
回复
引用 5 楼 qinlei812810 的回复:
呵呵呵,我在想,是不是发个远程我帮你写呢?呵呵呵
现在服务这么到位?还远程帮助写代码,以后帮我写代码如何?我用分数换。
yezis 2013-07-10
  • 打赏
  • 举报
回复
我是说 <?xml version="1.0" encoding="utf-8" ?> <measure> <name>0.0</name> </measure> 用JS提取到<>中的东西 比如上面的<name>0.0</name> 我想提取的是“name” 不是 “0.0”
未知数 2013-07-09
  • 打赏
  • 举报
回复
服务端语言环境应该会提供xml操作的类吧,直接从xml中把需要的值读出来赋值就行了
JAVA模版引擎Freemarker常用标签(一) 1. if指令 这是一个典型的分支控制指令,该指令的作用完全类似于Java语言中的if,if指令的语法格式如下: <#if condition>... <#elseif condition>... <#elseif condition>... <#else> ... 例子如下: <#assign age=23> <#if (age>60)>老年人 <#elseif (age>40)>中年人 <#elseif (age>20)>青年人 <#else> 少年人 输出结果是:青年人 上面的代码中的逻辑表达式用括号括起来主要是因为里面有>符号,由于FreeMarker会将>符号当成标签的结束字符,可能导致程序出错,为了避免这种情况,我们应该在凡是出现这些符号的地方都使用括号. <#if animals.python.price < animals.elephant.price> Pythons are cheaper than elephants today. <#else> Pythons are not cheaper than elephants today. 2、 switch , case , default , break指令 这些指令显然是分支指令,作用类似于Java的switch语句,switch指令的语法结构如下: <#switch value> <#case refValue>...<#break> <#case refValue>...<#break> <#default>... 3、 list, break指令 list指令是一个迭代输出指令,用于迭代输出数据模型中的集合,list指令的语法格式如下: <#list sequence as item> ... 上面的语法格式中,sequence就是一个集合对象,也可以是一个表达式,但该表达式将返回一个集合对象,而item是一个任意的名字,就是被迭代输出的集合元素.此外,迭代集合对象时,还包含两个特殊的循环变量: item_index:当前变量的索引值 item_has_next:是否存在下一个对象 也可以使用<#break>指令跳出迭代 例子如下: <#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as x> ${x_index + 1}.${x}<#if x_has_next>, <#if x="星期四"><#break>

We have these animals:

NamePrice <#list animals as being>
${being.name}${being.price} Euros
输出为:

We have these animals:

NamePrice
mouse50 Euros
elephant5000 Euros
python4999 Euros
4、include指令 include指令的作用类似于JSP的包含指令,用于包含指定页.include指令的语法格式如下: <#include filename [options]> 在上面的语法格式中,两个参数的解释如下: filename:该参数指定被包含的模板文件 options:该参数可以省略,指定包含时的选项,包含encoding和parse两个选项,其中encoding指定包含页面时所用的解码集,而parse指定被包含文件是否作为FTL文件来解析,如果省略了parse选项值,则该选项默认是true. Test page

Test page

Blah blah... <#include "/copyright_footer.html"> 5、 import指令 该指令用于导入FreeMarker模板中的所有变量,并将该变量放置在指定的Map对象中,import指令的语法格式如下: <#import "/lib/common.ftl" as com> 上面的代码将导入/lib/common.ftl模板文件中的所有变量,将这些变量放置在一个名为com的Map对象中. 创建库 ? 下面是一个创建库的例子(假设保存在lib/my_test.ftl中): <#macro copyright date>

Copyright (C) ${date} Julia Smith. All rights reserved.
Email: ${mail}

<#assign mail = "jsmith@acme.com"> ? 使用import指令导入库到模板中,Freemarker会为导入的库创建新的名字空间,并可以通过import指令中指定的散列变量访问库中的变量: <#import "/lib/my_test.ftl" as my> <#assign mail="fred@acme.com"> <@my.copyrightdate="1999-2002"/> ${my.mail} ${mail} 输出结果:

Copyright (C) 1999-2002 Julia Smith. All rights reserved.
Email: jsmith@acme.com

jsmith@acme.com fred@acme.com 可以看到例子中使用的两个同名变量并没有冲突,因为它们位于不同的名字空间 l 可以使用assign指令在导入的名字空间中创建或替代变量,下面是一个例子: <#import "/lib/my_test.ftl" as my> ${my.mail} <#assign mail="jsmith@other.com" in my> ${my.mail} l 输出结果: jsmith@acme.com jsmith@other.com l 数据模型中的变量任何地方都可见,也包括不同的名字空间,下面是修改的库: <#macro copyright date>

Copyright (C) ${date} ${user}. All rights reserved.

<#assign mail = "${user}@acme.com"> l 假设数据模型中的user变量的值是Fred,则下面的代码: <#import "/lib/my_test.ftl" as my> <@my.copyright date="1999-2002"/> ${my.mail} l 输出结果:

Copyright (C) 1999-2002 Fred. All rights reserved.

1.6 算术运算符 FreeMarker表达式中完全支持算术运算,FreeMarker支持的算术运算符包括:+, - , * , / , % 看如下的代码: <#assign x=5> ${ x * x - 100 } ${ x /2 } ${ 12 } 输出结果是: -75 2.5 2 在表达式中使用算术运算符时要注意以下几点: 1,运算符两边的运算数字必须是数字 2,使用+运算符时,如果一边是数字,一边是字符串,就会自动将数字转换为字符串再连接,如:${3 + "5"},结果是:35 使用内建的int函数可对数值取整,如: <#assign x=5> ${ (x/2)?int } ${ 1.1?int } ${ 1.999?int } ${ -1.1?int } ${ -1.999?int } 结果是:2 1 1 -1 -1 1.7 比较运算符 表达式中支持的比较运算符有如下几个: 1. =或者==:判断两个值是否相等. 2. !=:判断两个值是否不等. 3. >或者gt:判断左边值是否大于右边值 4. >=或者gte:判断左边值是否大于等于右边值 5. <或者lt:判断左边值是否小于右边值 6. <=或者lte:判断左边值是否小于等于右边值 注意:=和!=可以用于字符串,数值和日期来比较是否相等,但=和!=两边必须是相同类型的值,否则会产生错误,而且FreeMarker是精确比 较,"x","x ","X"是不等的.其它的运行符可以作用于数字和日期,但不能作用于字符串,大部分的时候,使用gt等字母运算符代替>会有更好的效果,因为 FreeMarker会把>解释成FTL标签的结束字符,当然,也可以使用括号来避免这种情况,如:<#if (x>y)> 1.8 逻辑运算符 逻辑运算符有如下几个: 逻辑与:&& 逻辑或:|| 逻辑非:! 逻辑运算符只能作用于布尔值,否则将产生错误 1.9 内建函数 FreeMarker还提供了一些内建函数来转换输出,可以在任何变量后紧跟?,?后紧跟内建函数,就可以通过内建函数来轮换输出变量.下面是常用的内建的字符串函数: html:对字符串进行HTML编码 cap_first:使字符串第一个字母大写 lower_case:将字符串转换成小写 upper_case:将字符串转换成大写 trim:去掉字符串前后的空白字符 下面是集合的常用内建函数 size:获取序列中元素的个数 下面是数字值的常用内建函数 int:取得数字的整数部分,结果带符号 例如: <#assign test="Tom & Jerry"> ${test?html} ${test?upper_case?html} 结果是:Tom & Jerry TOM & JERRY 1.10 空值处理运算符 FreeMarker对空值的处理非常严格,FreeMarker的变量必须有值,没有被赋值的变量就会抛出异常,因为FreeMarker未赋值 的变量强制出错可以杜绝很多潜在的错误,如缺失潜在的变量命名,或者其他变量错误.这里所说的空值,实际上也包括那些并不存在的变量,对于一个Java的 null值而言,我们认为这个变量是存在的,只是它的值为null,但对于FreeMarker模板而言,它无法理解null值,null值和不存在的变 量完全相同. 为了处理缺失变量,FreeMarker提供了两个运算符: !: 指定缺失变量的默认值 ??: 判断某个变量是否存在 其中,!运算符的用法有如下两种: variable!或variable!defaultValue,第一种用法不给缺失的变量指定默认值,表明默认值是空字符串,长度为0的集合,或者长度为0的Map对象. 使用!指定默认值时,并不要求默认值的类型和变量类型相同.使用??运算符非常简单,它总是返回一个布尔值,用法为:variable??,如果该变量存在,返回true,否则返回false ########################### 最常用的概念 1、 scalars:存储单值 字符串:简单文本由单或双引号括起来。 数字:直接使用数值。 日期:通常从数据模型获得 布尔值:true或false,通常在<#if …>标记中使用 2、 hashes:充当其它对象的容器,每个都关联一个唯一的查询名字 具有一个唯一的查询名字和他包含的每个变量相关联。 3、 sequences:充当其它对象的容器,按次序访问 使用数字和他包含的每个变量相关联。索引值从0开始。 4、 集合变量: 除了无法访问它的大小和不能使用索引来获得它的子变量:集合可以看作只能由<#list...>指令使用的受限sequences。 5、 方法:通过传递的参数进行计算,以新对象返回结果 方法变量通常是基于给出的参数计算值在数据模型中定义。 6、 用户自定义FTL指令:宏和变换器 7、 节点 节点变量表示为树型结构中的一个节点,通常在XML处理中使用。 在模板里对sequences和hashes初始化 sequences 1. [“you”,”me”,”he”] 2. 1..100 3. [ {“Akey”:”Avalue”},{“Akey1”:”Avalue1”}, {“Bkey”:”Bvalue”},{“Bkey1”:”Bvalue1”}, ] hashes {“you”:”a”,”me”:”b”,”he”:”c”} 注释标志 <#-- 这里是注释 --> 旧版本的freemarker采用的是<#comment> 注释 方法 sequences内置方法 sequence?first 返回sequence的第一个值;前提条件sequence不能是null sequence?last 返回sequence最后一个值 sequence?reverse 反转sequence的值 sequence?size 返回sequence的大小 sequence?sort 对sequence按里面的对象toString()的结果进行排序 sequence?sort_by(value) 对sequence 按里面的对象的属性value进行排序 如: sequence里面放入的是10 个user对象,user对象里面包含name,age等属性 sequence?sort_by(name) 表示所有的user按user.name进行排序 hashes内置方法 hash?keys 返回hash里的所有keys, 返回结果类型sequence hash?values 返回hash里的所有value, 返回结果类型sequence 模板 使用FTL(freeMarker模板语言)编写 组成部分 一、整体结构 1、注释:<#--注释内容-->,不会输出。 2、文本:直接输出。 3、interpolation:由 ${var} 或 #{var} 限定,由计算值代替输出。 4、FTL标记 二.表达式 1、直接指定值: 1-1、字符串: 由双引号或单引号括起来的字符串,其中的特殊字符(如' " \等)需要转义。 1-2、raw字符串: 有一种特殊的字符串称为raw字符串,被认为是纯文本,其中的\和{等不具有特殊含义,该类字符串在引号前面加r,下面是一个例子: ${r"/${data}"year""}屏幕输出结果为:/${data}"year" 转义 含义 序列 \" 双引号(u0022) \' 单引号(u0027) \\ 反斜杠(u005C) \n 换行(u000A) \r Return (u000D) \t Tab (u0009) \b Backspace (u0008) \f Form feed (u000C) \l < \g > \a & \{ { \xCode 4位16进制Unicode代码 1-3、数字:直接输入,不需要引号 1)、精度数字使用“.”分隔,不能使用分组符号 2)、目前版本不支持科学计数法,所以“1E3”是错误的 3)、不能省略小数点前面的0,所以“.5”是错误的 4)、数字8、+8、08和8.00都是相同的 1-4、布尔值:true和false,不使用引号 1-5、序列:由逗号分隔的子变量列表,由[]方括号限定。 1)、子变量列表可以是表达式 2)、可以使用数字范围定义数字序列,不需要方括号限定,例如2..5等同于[2, 3, 4, 5],但是更有效率,可以定义反递增范围如:5..2。 1-6、散列(hash) 1)、由逗号分隔的键/值列表,由{}大括号限定,键和值之间用冒号分隔,如:{"key1":valu1,"key2":"character string"....} 2)、键和值都是表达式,但是键必须是字符串。 2、获取变量: 2-1、顶层变量:${变量名} 变量名只能是字母、数字、下划线、$、#、@ 的组合,且不能以数字开头。 2-2、散列:有两种方法 1)、点语法:变量名字和顶层变量的名字受同样的限制 2)、方括号语法:变量名字无限制,可以是任意的表达式的结果 book.author.name book.author.["name"] book["author"].name book["author"]["name"] 以上是等价的。 2-3、序列:使用散列的方括号语法获取变量,方括号中的表达式结果必须为数字。注意:第一个项目的索引为0。可以使用 [startindex..endindex]语法获取序列片段。 2-4、特殊变量:FreeMarker内定义变量,使用.variablename语法访问。 3、字符串操作 3-1、interpolation:使用${}或#{}在文本部分插入表达式的值,例如: ${"hello${username}!"} ${"${username}${username}${username}"} 也可以使用+来获得同样的结果: ${"hello"+username+"!"} ${username+username+username} 注意:${}只能用于文本部分而不能出现于标记内。 <#if ${user.login}>或<#if "${user.login}">都是错误的; <#if user.login>是正确的。 本例中user.login的值必须是布尔类型。 3-2、子串: 举例说明:假如user的值为"Big Joe" ${user[0]}${user[4]}结果是:BJ ${user[1..4]}结果是:ig J 4、序列操作 4-1、连接操作:可以使用+来操作,例如: ["title","author"]+["month","day"] 5、散列操作 5-1、连接操作:可以使用+来操作,如果有相同的KEY,则右边的值会替代左边的值,例如: {"title":散列,"author":"emma"}+{"month":5,"day":5}+{"month":6}结果month的值就是6。 6、算术运算 6-1、操作符:+、-、*、/、% 除+号以外的其他操作符两边的数据,必须都是数字类型。 如果+号操作符一边有一个字符型数据,会自动将另一边的数据转换为字符型数据,运算结果为字符型数据。 6-2、比较操作符: 1}、= 2}、== 3}、!= 4}、< 5}、<= 6}、> 7}、>= 1-3的操作符,两边的数据类型必须相同,否则会产生错误 4-7的操作符,对于日期和数字可以使用,字符串不可以使用。 注意: 1}、FreeMarker是精确比较,所以"x" "x " "X"是不等的。 2}、因为<和>对FTL来说是开始和结束标记,所以,可以用两种方法来避免这种情况: 一种是使用括号<#if (a 另一是使用替代输出,对应如下: < lt <= lte > gt >= gte 6-3、逻辑操作符:只能用于布尔值,否则会出现错误。 &&(and)与运算 ||(or)或运算 !(not)非运算 6-4、内建函数:使用方法类似于访问散列的子变量,只是使用?代替.例如:${test?upper_case?html} 常用的内建函数列举如下: 1}、字符串使用: html:对字符串进行HTML编码 cap_first:字符串第一个字母大写 lower_first:字符串第一个字母小写 upper_case:将字符串转换成大写 trim:去掉字符前后的空白字符 2)、序列使用: size:获得序列中元素的数目 3)、数字使用: int:取得数字的整数部分 7、操作符的优先顺序: 后缀:[subbarName][subStringRange].(mathodParams) 一元:+expr、-expr、! (not) 内建:? 乘法:*、/、% 加法:+、- 关系:<、<=、>、>= (lt、lte、gt、gte) 相等:=、==、!= 逻辑与:&& (and) 逻辑或:|| (or) 数字范围:.. 四、interpolation inperpolation只能用于文本,有两种类型:通用interpolation及数字interpolation 1、通用interpolation 如${expr} 1-1、插入字符串值:直接输出表达式结果。 1-2、插入数字值:根据缺省格式(由setting指令设置)将表达式结果转换成文本输出;可以使用内建函数string来格式化单个interpolation 如: <#setting number_format="currency" /> <#assign answer=42 /> ${answer} <#-- ¥42.00 --> ${answer?string} <#-- ¥42.00 --> ${answer?string.number} <#-- 42 --> ${answer?string.currency} <#-- ¥42.00 --> ${answer?string.percent} <#-- 42,00% --> 1-3、插入日期值:根据缺省格式(由setting指令设置)将表达式结果转换成文本输出;可以使用内建函数string来格式化单个interpolation 如: ${lastupdata?string("yyyy-MM-dd HH:mm:ss zzzz")} <#-- 2003-04-08 21:24:44 Pacific Daylight Time --> ${lastupdata?string("EEE,MMM d, ''yy")} <#-- tue,Apr 8, '03 --> ${lastupdata?string("EEEE,MMMM dd, yyyy,hh:mm:ss a '('zzz')'")} <#-- Tuesday,April 08, 2003, 09:24:44 PM (PDT)--> 1-4、插入布尔值:根据缺省格式(由setting指令设置)将表达式结果转换成文本输出;可以使用内建函数string来格式化单个interpolation 如: <#assign foo=ture /> ${foo?string("yes","no")} <#-- yes --> 2、数字interpolation: 有两种形式: 1)、#{expr} 2)、#{expr;format}:format可以用来格式化数字,format可以是如下: mX:小数部分最小X位 MX:小数部分最大X位 例如: <#assign x=2.582 /> <#assign y=4 /> #{x;M2} <#-- 2.58 --> #{y;M2} <#-- 4 --> #{x;m1} <#-- 2.582 --> #{y;m1} <#-- 4.0 --> #{x;m1M2} <#-- 2.58 --> #{y;m1M2} <#-- 4.0 --> 宏 宏和变换器变量是两种不同类型的用户自定义指令,他们的区别是: 宏可以在模板中用macro指令来定义 变换器是在模板外由程序定义 1、宏:和某个变量关联的模板片段,以便在模板中通过用户自定义指令使用该变量 1-1、基本用法: 例如: <#macro greet> Hello JOE! 使用时: <@greet> 如果没有体内容也可以用 <@greet /> 1-2、变量: 1)、可以在宏定义之后定义参数,宏参数是局部变量,只在宏定义中有效。如: <#macro greet person> Hello ${person}! 使用时: <@greet person="emma"> and <@greet person="LEO"> 输出为: Hello emma! Hello LEO! 注意:宏的参数是FTL表达式,所以,person=emma和上面的例子中具有不同的意义,这意味着将变量emma的值传给person,这个值可能是任意一种数据类型,甚至是一个复杂的表达式。 宏可以有多个参数,使用时参数的次序是无关的,但是只能使用宏中定义的参数,并且对所有参数赋值。如: <#macro greet person color> Hello ${person}! 使用时: <@greet color="black" person="emma" />正确 <@greet person="emma" />错误,color没有赋值,此时,如果在定义宏时为color定义缺省值<#macro greet person color="black">这样的话,这个使用方法就是正确的。 <@greet color="black" person="emma" bgcolor="yellow" />错误,宏greet定义中未指定bgcolor这个参数 2、嵌套内容: 2-1、自定义指令可以有嵌套内容,使用<#nested>指令,执行自定义指令开始和结束标记之间的模板片段。例如: <#macro greet> <#nested> <@greet>hello Emma! 输出为 hello Emma! 2-2、<#nested>指令可以被多次调用,例如 <#macro greet> <#nested> <#nested> <#nested> <#nested> <@greet>hello Emma! 输出为 hello Emma! hello Emma! hello Emma! hello Emma! 2-3、嵌套的内容可以是有效的FTL,例如: <#macro welcome> <#nested> <#macro greet person color="black"> Hello ${person}! <@welcome> <@greet person="Emma" color="red" /> <@greet person="Andrew" /> <@greet person="Peter" /> 输出为: Hello Emma! Hello Andrew! Hello Peter! 2-4、宏定义中的局部变量对嵌套内容是不可见的,例如: <#macro repeat count> <#local y="test" /> <#list 1..count as x> ${y}${count}/${x}:<#nested /> <@repeat count=3> ${y?default("?")} ${x?default("?")} ${count?default("?")} 输出结果为 test 3/1:??? test 3/2:??? test 3/3:??? 2-5、在宏定义中使用循环变量,通常用来重复嵌套内容,基本用法为:作为nested指令的参数,传递循环变量的实际值,而在调用自定义指令时,在标记的参数后面指定循环变量的名字。 例如: <#macro repeat count> <#list 1..count as x> <#nested x,x/2,x==count /> <@repeat count=4;c,halfc,last> ${c}. ${halfc} <#if last> last! 输出结果是 1. 0.5 2. 1 3. 1.5 4. 2last! 注意:指定循环变量的数目和用户定义指令开始标记指定的不同不会有问题 调用时,少指定循环变量,多指定的值会不见 调用时,多指定循环变量,多余的循环变量不会被创建 二、在模板中定义变量 1、在模板中定义的变量有三种类型 1-1、plain变量:可以在模板的任何地方访问,包括使用include指令插入的模板,使用assign指令创建和替换。 1-2、局部变量:在宏定义体中有效,使用local指令创建和替换。 1-3、循环变量:只能存在于指令的嵌套内容,由指令(如list)自动创建。 注意: 1)、宏的参数是局部变量,不是循环变量。 2)、局部变量隐藏同名的plain变量 3)、循环变量隐藏同名的plain变量和局部变量。 例如: <#assign x="plain"> 1. ${x} <#-- plain --> <@test /> 6. ${x} <#list ["loop"] as x> 7. ${x} <#-- loop --> <#assign x="plain2"> 8. ${x} <#-- loop --> 9. ${x} <#-- plain2 --> <#macro test> 2. ${x} <#-- plain --> <#local x="local"> 3. ${x} <#-- local --> <#list ["loop"] as x> 4. ${x} <#-- loop --> 5. ${x} <#-- local --> 4)、内部循环变量隐藏同名的外部循环变量 <#list ["loop1"] as x> ${x} <#-- loop1 --> <#list ["loop2"] as x> ${x} <#-- loop2 --> <#list ["loop3"] as x> ${x} <#-- loop3 --> ${x} <#-- loop2 --> ${x} <#-- loop1 --> 5)、模板中的变量会隐藏数据模型中的同名变量,如果需访问数据模型中的变量,使用特殊变量global。 例如: 假设数据模型中的user值为Emma <#assign user="Man"> ${user} <#-- Man --> ${.global.user} <#-- Emma --> macro, nested, return 语法 <#macro name param1 param2 ... paramN> ... <#nested loopvar1, loopvar2, ..., loopvarN> ... <#return> ... 用例 <#macro test foo bar="Bar"[A1] baaz=-1> Test text, and the params: ${foo}, ${bar}, ${baaz} <@test foo="a" bar="b" baaz=5*5-2/> <@test foo="a" bar="b"/> <@test foo="a" baaz=5*5-2/> <@test foo="a"/> 输出 Test text, and the params: a, b, 23 Test text, and the params: a, b, -1 Test text, and the params: a, Bar, 23 Test text, and the params: a, Bar, -1 定义循环输出的宏 <#macro list title items> ${title?cap_first}:
Winson.Framework 1.0简介:

Winson.Framework 1.0可以说是一个基于ASP.NET2.0技术小型应用框架,是本人从以

往的开发经验和网上的一些好的代码收集整合而成的。

这里需要说明一下的就是,本框架的数据库底层代码是改自于台湾一位朋友的数据库

底层代码,我是在其基础上添加了一些功能,如可同时可支持MSSQL和ACCESS数据库,可显

示自定义异常等。当然,如果需也,也可以继续扩展支持其他的数据库,呵呵。

========================================

功能介绍:

一、数据库类:

1、本框架是基于ASP.NET2.0技术,同时可支持MSSQL和ACCESS数据库,只需在配置文件里修改
一下即可马上使用不同的数据库,不需改其他任何代码。
2、可设置是否对连接字符串进行加密,并可设置加解密KEY。
3、可直接使用XML文件为实体
4、可设置是否需要缓存,同时可设置缓存文件依赖存放的位置
5、可支持多语言的数据库自定义错误信息,现在支持简体和繁体2种
6、可设置是否启用错误日志记录
7、可设置自动保存应用程序参数的时间间隔
8、可设置是否显示系统异常信息,否则显示自定义异常信息
9、通用的数据库底层操作,同时支持存储过程调用
10、方便地操作读取自定义配置文件的信息

二、功能控件类:

1、漂亮的自定义警告框,可为警告框设置相应的事件
2、漂亮的自定义提示框,即类似MSN消息框的效果,可设置多种效果,也可以使用事件钩子调用
3、强大的自定义分页控件,支持多种数据绑定控件,支持自定义分页按钮样式,支持AJAX无刷新
分页,可灵活设置各种参数效果
4、方便的Tab控件(取自Discuz!NT),即DNT论坛后台的那种选项卡的效果
5、类帮助器,可以动态对类,类成员进行控制(添加,删除),目前只支持属性控制。
6、可动态创建ul或者dl构成的列表
7、通用的MessageBox类,可根据需要显示各种提示框
8、支持URL重写,可自定义重写规则,同时还可以限制IP访问,需修改XML配置文件
9、Xml文件操作类库,基本上已可满足常用的XML操作需要

三、经常需要使用的一些验证逻辑与方法类:

1、返回上一个页面的地址
2、获取当前请求的原始 URL(URL 中域信息之后的部分,包括查询字符串(如果存在))
3、获得当前完整Url地址
4、过滤危险字符串
5、替换html中的特殊字符
6、恢复html中的特殊字符
7、检查一个字符串是否可以转化为日期,一般用于验证用户输入日期的合法性
8、检查一个字符串是否是纯数字构成的,一般用于查询字符串参数的有效性验证。
9、检查一个字符串是否是纯字母和数字构成的,一般用于查询字符串参数的有效性验证。
10、判断是否是数字,包括小数和整数。
11、快速验证一个字符串是否符合指定的正则表达式
12、上传文件,不限制大小和类型并上传到默认UploadFile目录
13、上传文件,不限制大小和类型并上传到自定义路径
14、上传文件,可设置大小、类型和存放路径
15、生成缩略图
16、在图片上增加文字水印
17、在图片上生成图片水印

四、实体操作类:

1、利用泛型和集合,结合数据库实体进行操作以提高效率和封装性
2、动态生成所需的SQL增、删、改、查等语句对实体进行操作
3、上层操作可以不需要写SQL语句
4、实体赋值方便,只需设置需要更新的某个字段即可,不需全部字段去赋值,同时读取实体
时系统也会自动为每个字段赋值,不需再手工编写赋值代码
5、由于本框架的实体类和实体操作类需特别处理,因此已提供了实体类和实体操作类的代码
生成模板文件,使用Codesmith生成!
6、另此DEMO附一个无限级分类的管理操作及相关的数据库

五、其他说明:

本程序目录里已有多个试例DEMO,基本上主要功能均有演示了,另有一个非常通用方便的JS

校验文件,在js/check.js目录,至于使用方法,请自己看看里面的注释吧,呵呵

欢迎大家一起来完善这个框架,有什么好的东西记得告诉我哦:)

87,904

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧