使用DTD时要求以 /开头限制action的path属性

本文讲述了在使用DTD时如何约束action的path属性以/开头。通过XML建模,创建ActionModel对象并利用正则表达式在setter方法中实现约束。此外,还分享了关于DTD中ID唯一约束的注意事项,包括命名规则和值不可为空的特性。
摘要由CSDN通过智能技术生成

使用DTD时要求以 /开头 限制action的path属性

       最近遇到一个题目在config.xml中写DTD,要求 path:以/开头的字符串。当时刚刚学了五个约束,①ID唯一约束,②(男|女)检查约束只能放括号里面的值,③CDATA 文本约束,④IDREF 与ID的关系就像数据库的外键约束所以我也叫ID和IDREF为主外键(个人习惯),⑤#REQUIRED 和 #IMPLIED 不允许空和允许空元素。

做题的疑惑

题目要求
       这个用DTD那五个约束肯定写不出来,然后问了其他人以/开头的内容怎么约束,他们说写字符串CDATA就行了,说这是个坑。然后我就写了文本非空约束。直到学到了XMl建模,才能完整的把这个题目做出来。

用XMl建模解决

actionmodel里面的set方法来做
       相当于就是一个对象,实现了序列化接口Serializable。当然在XML建模中所有标签都要写一个对象,这个解决action中path的问题就聊ActionModel。把action中的属性像定义对象属性一样定义出来,并且写出set,get方法。在设置(set)path的时候,利用正则表达式约束 path的值要求以“ / ”开头。这样调用set方法的时候就能约束了。
       顺便提一句,第32行中那个运行时异常会让代码执行那一行的时候终止。
       调用对象,这里要建一个工厂类,专门用来生产标签属性用的,要先获取到xml的配置信息。工厂类及方法
       如图,可以看到写一个创建方法进行判断他是否原来已经有了,在抛出异常。然后就是获取配置信息,action值的方法。拿到的nodeList是一个集合,采用foreach遍历的方法,可以设置。
在这里插入图片描述
设置path的方法就有了。再写主方法或者其他类就可以调用创建的那个方法。如果一旦不符合规则,如下图会报出自己写的异常。在这里插入图片描述
如果要写题目中的唯一约束的话,方法差不多就是要判断一下。用 map集合名.containsKey(集合键)。 的方法是可以判断的这个集合是否包含这个键的。

其他DTD收获

不报错却运行不了

开始不是要写唯一非空的字符串嘛,然后我就这样写了。
在这里插入图片描述
       dtd里面是没报错的,我也怀疑我有点色盲,ID 和 CDATA颜色不一样我都没看出来。我把的dtd文件直接放入xml中也不对,最后,拿朋友代码一点一点的对比才发现多了一个ID。删掉后就对了。
       当时我在想这样岂不是不能唯一约束了,我就到网上搜了搜,不过搜资料的过程中,我发现了别的争议的地方。

唯一约束ID,属性值命名

第一个观点 :唯一约束ID 属性不能以数字开头;
第二个观点 :唯一约束ID 属性必须为下划线或字母开头;
我看见了之后我就在想,不能以数字开头,可以用中文或者其他符号呢(xml是允许其他符号放在变量名里面的)那就自己试试吧,实践出真相!

明显看到ID是不允许“-” 这类符号开头的,但是放中间是没问题啦。在这里插入图片描述

唯一约束ID,其值不可为空

       当时,我写了ID约束,但是把没有写值然后就报错了。我并没有找到网上说ID值除了唯一还有其他属性。于是我把ID加上允许为空的约束,来试了一下。在这里插入图片描述
可以看到CDATA加上可以为空之后正常,而ID加上可以为空之后却还是不可以为空。
总结:遇到有趣的就记录下来。说不定,以后自己看着会觉得自己很蠢呢。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值