关于项目自动化测试架构的改良计划 - 解析XInclude标记
发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,因为在test_suite.xml中,我们多处使用了XInclude标记,他们会被申明在一个叫"http://www.w3.org/2001/XInclude" 的名字空间中,并且引入部分用xi:in
千家信息网最后更新 2025年02月04日关于项目自动化测试架构的改良计划 - 解析XInclude标记
因为在test_suite.xml中,我们多处使用了XInclude标记,他们会被申明在一个叫"http://www.w3.org/2001/XInclude" 的名字空间中,并且引入部分用xi:include来声明,我们这个类的作用就是把这些所有的
/** * This class will handle converting a xinclude+xpointer marked xml file to a normal xml file * Because of the shortage of the current jdk ,it only support the xPointer with element instead of NCName *@author cwang58 *@created date: Jun 10, 2013 */public class XIncludeConverter { /** * this method will handle change the XInclude+XPointer marked xml as normal xml * @param origialXML the original xml which has the xInclude feature * @return the parsedXML without the xInclude feature */ public static String convertXInclude2NormalXML(String originalXML) throws SAXException,ParserConfigurationException,TransformerConfigurationException,IOException,TransformerException{ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); //open up the namespace aware so that it can recognize the "xi" namespace factory.setNamespaceAware(true); //let this SAXParser support XInclude factory.setXIncludeAware(true); //factory.setValidating(true); //ignore all the comments added in the source document factory.setIgnoringComments(true); DocumentBuilder docBuilder = factory.newDocumentBuilder(); Document doc = docBuilder.parse(new InputSource(new ByteArrayInputStream(originalXML.getBytes("utf-8")))); Transformer transformer = TransformerFactory.newInstance().newTransformer(); //format the output xml string so it support indent and more readable transformer.setOutputProperty(OutputKeys.INDENT, "yes"); //initialize StreamResult with File object to save to file StreamResult result = new StreamResult(new StringWriter()); DOMSource source = new DOMSource(doc); transformer.transform(source, result); return result.getWriter().toString(); }
这里讲一个小插曲,其实,W3C中,XInclude经常和Xpointer联合起来应用的,xpointer可以帮助来定位目标文件的某个小片段而不是整个目标文件,定位方法可以用element(),或者xpointer(),如果element的话,可以用(/1/2/3)这种方式来定位DOM,或者基于 id,对应java的解析框架是xerce,但是非常不幸运的是,最新版本的xerce框架只支持element(/1/3/4/5)这种定位,而对于基于schema-id的方式,也就是某个element声明了id的情况,它没办法定位,但是未来可能会支持这个功能。
http://xerces.apache.org/xerces2-j/faq-xinclude.html#faq-8
基于上述的局限性,我决定只采用xi:include来包含全部文件,然后局部调整的做法,并且绕过xpointer。
所以实现代码如上所示,事实上从JDK 1.6开始,他已经提供了对XInclude的支持,内部是委托给xerce来实现的,这是对应架构图的第3-4步骤。
定位
文件
支持
方式
框架
目标
部分
架构
标记
不幸
也就是
事实
事实上
代码
作用
做法
办法
功能
名字
如上
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络技术培训考试题
绍兴app软件开发步骤
服务器转速
接收邮件服务器的默认端口一般是
重庆惠普服务器备件
网络安全办电话
网易服务器的32k都是哪来的
港股互联网科技etf
oracle数据库为什么安全
网络安全动态ppt模板
三级数据库技术应用题
电子商务网络技术基础第二版
快手校招软件开发工程师
软件开发项目管理师报名
考网络安全研究生考数学一难吗
道德与法治与信息技术网络安全
vivo软件开发工程师
广州办公软件开发公司
王者换服务器小队咋退
光网络技术华科
学软件开发技术很难吗
菏泽网络安全吗
电脑怎么设置服务器
电信网络技术学习
属于网络安全事件分类的
网络安全体系包括哪些部位
东城区网络安全培训
网络安全保护平台建设使用情
光网络技术华科
元宇宙服务器谁说了算