二十三、自定义并解析Xml文件
来源:互联网 发布:女装品牌推荐 知乎 编辑:程序博客网 时间:2024/06/07 17:22
第一步,定义Xml文件。
随便定义一个xml,例如:
<Info>
<Type>1</Type>
<Price>
<PriceValue>10000</PriceValue>
</Price>
</Info>
第二步,获取Xml数据。
(Xml文件读入在页面上一般会用个弹出框或者浮层的展现形式,但从实现上一般来说都会是一个异步ajax请求。)
首先从request中取xml描述信息,比如
String xmlDesc = rundata.getRequest.getParameter(“content”);
处理下换行符等:
String line = System.getproperty(“line.separator”);
xmlDesc = xmlDesc.replace(line,””);
xmlDesc = xmlDesc.replace(“\r”,””);
xmlDesc = xmlDesc.replace(“\n”,””);
xmlDesc = xmlDesc.replace(“\r\n”,””);
然后检查xml是否符合xml规范:
Public class DocumentXmlHelper{Public static Document read(String xmlDesc){java.io.StringReader stringReader = new StringReader(xmlDesc); org.dom4j.io.SAXReader saxReader = new SAXReader(); boolean valid = true;org.dom4j.Document document = null;try{document = saxReader.read(stringReader);}catch(org.dom4j.DocumentException e){ valid = false; } if(valid){ Return document; }}
注:这是dom4j官方提供的对xml规范的校验。
如果符合xml规范即valid是true,继续将这段string形式的xmlDesc保存成javabean。
Public static SomeDO parseXml(String xmlDesc){ Document document = DocumentXmlHelper.read(xmlDesc); SomeDO someDO = new SomeDO(); If(document != null){ Element root = document.getRootElement(); For(Iterator<Element> fitrator = root.elementIterator(“Type”);fitrator.hasNext();){ Element e = (Element) fitrator.next(); Int type = Integer.parseInt(e.getTextTrim()); someDO.setType(type); } For(Iterator I = root.elementIterator(“Price”);i.hasNext();){ Element element = (Element) i.next(); For(Iterator<Element> fitrator = root.elementIterator(“PriceValue”);fitrator.hasNext();){ Element e = (Element) fitrator.next(); priceValue = Long.parseLong(e.getTextTrim()); someDO.setPriceValue(priceValue); } } }}
至此,定义解析xml就完成了。
---------------------------------------------------------------------------------------------------------------------------------
下面是根据业务规则对xmlDesc进行规则校验的过程了。
调用的是对象检查的统一服务接口:
List<String> checkResults = objectCheckService.check(someDO); 返回结果是个String列表,给个string描述一条规则校验的结果,如果是true表示校验通过,如果不通过就可以显示在具体校验类中返回的原因描述。
Public interface ObjectCheckService{
List<String> check(Object obj) ;
}
Public class ObjectCheckServiceImpl implements ObjectCheckService{
Public List<String> check(Object obj){
1. 取容器启动时就已经加载好的需校验条件列表。
每个规则校验类都实现统一接口ObjectCheck,这样在spring容器启动时就可以全部加载起来,通过ApplicationContext的getBeanNamesForType(ObjectCheck.class,true,false)方法得到所有实现了ObjectCheck的类名,然后再通过类名获得类实例ObjectCheck objectCheck = applicationContext.getBean(objectChekName,ObjectCheck.class);将这些objectCheck都add到objectCheckList列表中。
2. 定义一个倒计数的锁存器CountDownLatch变量doneSingal,初始值为1中需校验条件列表长度objectCheckList.size()
3. 对每个需校验条件进行校验。每种规则的校验都通过线程池中一个线程完成,直到countDownLatch变量值减为0,所有校验才都完成返回校验结果。
threadPool.execute( new WorkerRunnable(doneSingal, objectCheck,返回结果featureResult, someDO);
每个校验规则new出来的WorkerRunnable线程的run方法只要做一件事,就是调用规则校验实例objectCheck的check方法,将返回结果add如featureResult,计数器减一,这样等多个线程共同操作的计数器变量减到0时所有校验就完成了,会自动返回featureResult.
}
}
接下来是具体定义每个校验类。建议一类规则一个校验类。
Public String check(SomeDO someDO){
//someDO.getType==1然后怎样,这就根据业务了,不满足的话就return “type必须是1才可以**,嘿嘿”
}
- 二十三、自定义并解析Xml文件
- Android解析自定义xml文件--Sax解析xml文件,测试demo(方案二)
- 《锋利的jQuery》十三、jQuery加载并解析XML
- 加载并解析 XML 文件
- 加载并解析 XML 文件
- java加载XML文件并解析xml
- Ajax解析Xml文件(二)
- Android解析XML文件(二)
- xml文件解析(二)
- java自定义解析XML文件解析
- 二十三.自定义Git
- 二 cocos2dx 之 解析xml文件数据并在程序中调用,存储
- 创建并解析XML文件Java实例
- java 取到xml文件,并解析
- MFC读取XML文件并解析
- 获取服务器的xml文件并解析
- JavaScript读取并解析XML文件
- 解析XML文件,并封装成ARRAYLIST
- 一些C/C++开源项目网址
- 计算机定时运行程序
- 海量数据中寻找中位数
- Pinterest给创业公司的启示:DevOps模式对业务的快速增长至关重要
- linux 网络设置
- 二十三、自定义并解析Xml文件
- 服务器安全IP安全策略,批处理屏蔽危险端口
- 如何查看端口是否被占用
- 创建鼠标可以拖动的DIV
- 刨根问底系列之C++ const 挖掘
- 批量删除svn
- svn+mysql+tomcat+samba安装(精简版)
- c 中使用 ftruncate() 前需要 fflush(), 使用后需要 rewind()
- Quartz Transforms CTM, 转换矩阵