热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

根据源代码修改XSD文件

2019独角兽企业重金招聘Python工程师标准这两天遇到了一个问题,就是以前的公司的VB代码是根据XSD文件自动生成的,然后呢,这

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

这两天遇到了一个问题,就是以前的公司的VB代码是根据XSD文件自动生成的,然后呢,这个XSD文件被修改了(这就有点尴尬了),以后代码也要更加XSD文件进行生成,这个时候如果人工修改的话,那成本和时间也太高了,这个时候就只能写个工具去做这个事情了,省时省力。辛亏原来的代码是和数据库对接的,虽然文件多,代码量大,但是文件的结构是统一的。我选择Java进行这个工具的开发,主要我也是学习Java平台的。

XSD文件的解析

首先得考虑的是如何解析XSD文件的问题。在Java中,对XML文件的解析主要是有四种方式:DOM,SAX,JDOM,DOM4J。每个方式都有各自的优缺点,我最后考虑选择使用的是DOM的标准实现,主要是因为访问是双向的,可以在任何时候对树上下导航,获取和操作任意部分的数据。其他性能什么的还不是主要考虑的需求,因为不知道XSD中和VB源代码对应的代码中在什么地方,所以要直接就能再任意时刻对XSD的文件进行访问。

还有一个需要考虑的是XSD文件的命名空间的问题,没有命名空间的XML文件解析十分方便,但是存在命名空间的XSD文件解析优点麻烦,但是DOM可以直接获取到命名空间中最特殊的元素的位置,这就为定位需要修改的地方提供了较大的便利性。

VB文件的解析

看到是源代码,我们的第一反应应该是通过编译原理中讲的方式,对源代码进行整体分析,然后再进行处理。其实没有那个必要,原来的代码是通过代码生成器生成出来的,其本身就有一定的规律,找到这些规律之后,其实发现更加简单。

通过源码发现在如下语句之后"Public Class "加上对于的表名之后,下面的函数就是我们需要的内容了,再匹配”Public Property “加上行的名称,精确到一对一相对的关系,在对其中的数据进行提取,和XSD文件中每一个节点的属性进行对比后修改就行了。

这样,我们就完美的避开了需要对整个文件进行分析完之后才能进行匹配的坑了,虽然效果上肯定是进行分析后的好,但是我这种设计所造成的时间损耗还是在接受范围内的,并且开发的要求也不高。

方法设计

  1. 读取待匹配文件夹下的所有文件的名称,因为VB源代码和XSD文件的名称是一一对应的
  2. 通过名称找到相关的XSD文件
  3. 获取XSD文件中的相关信息
    1. 通过document.getElementsByTagName获取节点列表,当然我找的这元素有点特殊,其在XSD文中是唯一的,这个便利性就特别大了
    2. 获取当前DOM的实例
    3. 获取所有子节点的列表
    4. 对于每一个子节点的信息与VB中的信息匹配进行修改
  4. 获取VB中的信息
    1. 读取VB文件到Buffer中
    2. 按行进行读取,直达匹配到类级别
    3. 对此继续往下读,匹配到配置的信息
    4. 获取这个函数中的信息
    5. 通过正则表达式获取其中的信息
  5. 保存修改好的XSD到新的文件中
  6. 关闭各种流
后记

其实关键的东西没有多少,剩下的东西就是编码了,其实分析源代码有时候不一定要进行完整的分析,其实可以将其看成是对一个文件中的数据进行读取和分析,根据实际的需要和要求选择自己需要的技术就可以了,不一定要一尘不变。如匹配到类和方法的时候,我就发现正则是匹配方式不好,所有直接使用按为匹配的方式,而提取数据的时候正则的优势就表现出来了,所有根据环境选择东西,也有可能是我没有完全对正则理解透的原因。


转:https://my.oschina.net/wjpwroking/blog/805355



推荐阅读
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
author-avatar
fggdsfgwjff4
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有