一种 XML2XML 格式之间转换的解决方案(转)

2023-05-16

一种 XML2XML 格式之间转换的解决方案

本文提供了一种 XML2XML 格式之间转换的通用解决方案。我们通过建立用以存储数据信息的数据模型,并应用优化器 (Optimizers),转换规则 (Rules) 对所存储的信息进行深入处理等操作,序列化或转换生成了 XML 格式的目标文件,从而完成了 XML 格式之间的转换工作。

XML 格式之间的转换是 XML 技术领域内的一个比较常见,且又是一个很重要的话题。即使是在同一个行业的内部,数据文档的 XML Schema 之间的差距也非常大(比如现有系统的 XML Schema VS 系统早期的 XML Schema)。企业信息系统的集成,数据信息的交换等都需要进行 XML 数据格式之间的转换工作。本文试图提供一种 XML 格式之间转换的解决方案。

相对于 XSL, XSLT 等技术,本文的解决方案更适合于复杂的 XML 格式之间的转换工作。(本文的转换方案成功的解决了 PDF 的 XAF 文件格式,FileNet 表单文件格式到 IBM® Lotus Forms 表单文件格式的转换工作。事实上,这些文件都是基于 XML 语法的。有关 IBM® Lotus Forms 的简单介绍请参考“应用二叉树解析 XML 表示的函数计算表达式”一文。)

文章的组织结构如下:
 


  • 一种 XML 格式之间转换的构架
     
  • 构建 XML 格式转换的数据模型(Data Model)
     
  • 优化器(Optimizers)在解析原 XML 文件中的应用
     
  • 转换规则(Rules)在生成目标 XML 文件中的应用
     
  • 应用配置文件(Profile)管理 Optimizers 和 rules
     
  • 基于 Eclipse 的插件机制生成 XML 格式转换框架
     

一种 XML 格式之间转换的构架

不同 XML 格式之间的转换工作是如此之常见且又这般之重要。在 IT 领域,为了解决这一问题,各种新方法、新技术层出不穷。比如 XSL、XSLT 等技术,又比如 RDF/RDFS/OWL 技术(XML Schema 是用来定义 XML 文档结构 , 而 RDFS/OWL(本体描述语言)则定义了文档词汇,提供了一种共同的理解。当然本体 (Ontology),语义网络(Semantic Web)等相关的技术不单是为了解决 XML 格式之间转换的问题的。深入的知识,读者可参考有关的文档资料。)

本文也提出了一种 XML 格式之间转换的方案构架。如下图 1 所示:

图 1. XML 格式转换框架


原文件(XML 格式)通过解析器(Parser, 可以是任何一种 XML 解析技术 DOM, SAX, StAX etc.)解析生成数据信息,并存储在数据模型里。数据模型是整个构架的核心部分。数据模型主要是基于目标文件的 XML Schema 而构建的,也可以基于目标 XML 文件的领域知识(Domain Knowledge)构建。它可以是普通的数据模型(基于 POJO 的 Data Model), 也可以是基于 EMF(Eclipse Modeling Framework)的数据模型。关于数据模型,我们将在下一部分作详细的介绍。在对原 XML 文件进行解析的过程中,解析器要根据基于原文件和目标文件的 XML Schema 文件而生成的映射表中的信息,做相应的解析优化处理(比如,在电子表单领域,若目标文件的 Schema 中没有定义类似椭圆形(Oval)这样的元素,原文件中的 Oval 元素将全部被过滤掉,不进行解析。如果在目标文件的 Schema 中没有定义类似矩形的圆(round)这样的属性,那么原文件的矩形的圆(round)属性也将被过滤掉,不进行解析)。

在输出目标 XML 文件之前,优化器(Optimizer)和转换规则 (Rule) 先后对数据模型中的数据信息进行相应处理。配置文件 (Profile) 在构架中的作用是用来管理优化器和转换规则的。用户可以根据业务逻辑的需要通过配置文件来定制优化器和转换规则。在本文下面的部分中,我们将分别加以详细的论述。

经由上面对 XML 格式转换构架的简单介绍,读者就可以看出这种解决方案的简单灵活性,可复用性和可扩展性。只需为不同的原文件提供一个解析器 (Parser) 就扩展了构架的应用。

构建 XML 格式转换的数据模型(Data Model)

数据模型是用来存储解析进来的数据信息的,它是构架的核心部分。那么如何构建数据模型呢?有两种构建数据模型的办法——普通的数据模型和基于 EMF 技术构建的数据模型。

普通的数据模型是应用普通的 Java 类(POJO)来构建,主要是基于目标文件的领域知识,通常是结构化的数据模型。这种模型构建的优点是简单、通用,主要的缺点是需要构建输出模块从而把模型中的信息输出为满足目标 XML Schema 的 XML 文件。图 2 显示了在电子表单领域中应用的结构化数据模型示例片段。

图 2. 电子表单领域的结构化数据模型示例片段


基于 EMF 技术构建数据模型的技术已经相当成熟(读者可以参考 DW 上的有关文章)。在本文中,我们主要应用目标文件的 XML Schema 来构建 EMF 数据模型。基于 EMF 的数据模型具有事件通知机制和持久化方面的支持。因此,模型带来的最大的好处就是开发者不必自己动手构建输出模块。当然基于 EMF 构建数据模型需要开发者深入了解 EMF 建模机制。(IBM® Lotus Form 的 FOM(Form Object Model) 就是基于 EMF 技术构建的)

模型的构建是 XML 格式之间转换的关键。构建的模型应当满足应用程序的需求 ( 对照映射表,模型要完全支持原文件中的可匹配信息。也就是说,不能丢失可匹配数据信息 ),不要求模型囊括相关领域的所有通用知识,但模型提供给原文件解析器的 API 应该简单易用,模型要具有高可扩展性和良好的可维护性。

优化器(Optimizers)在解析原 XML 文件中的应用

当原 XML 文件中的信息被解析进来,并存储在已经建立的数据模型里,此时的数据模型称为原始数据模型,模型里面的数据信息称为原始数据信息。我们根据目标 XML 文件的特性,需要对原始数据信息进行优化处理。可以根据需要创建若干个 Optimizers。

图 3 显示了优化器(Optimizers)的构架。

图 3. 优化器(Optimizers)的构架


根据电子表单领域的实际需要,我们创建了很多 Optimizers。举例如下:

  • 线(Line)的对齐、连接,如图 4. 所示:
     


图 4. 线的对齐、连接示例





  • 标签 (Label) 的对齐、连接,如图 5. 所示:
     


图 5. 标签的对齐、连接示例


  • 输入框(Field)的对齐、识别,如图 6. 所示:
     

图 6. 输入框的识别示例


  • 选择框(checkbox)的识别,如图 7. 所示:
     

图 7. 选择框的识别示例


我们通过对以上 Optimizers 的应用,使得 PDF 文件的转换效果更佳。

事实上,优化器的开发应用取决于两种格式文件之间的可匹配的程度。如果两种文件的可匹配性很高(比如系统早期的 XML 文件转换升级成系统现在的 XML 文件),基本上不用开发优化器。反之,为了使数据平滑输出,需要根据业务逻辑的需要进行相应的优化处理。

此外,如果某种原文件的解析器需要用户通过 UI 配置一些解析参数的话,我们也可以提供 Parser 阶段应用的“Optimizers”。举例来说,原 XML 文件的某个元素和可匹配的目标 XML 文件的相应元素是一对多的关系,那么 Parser 的解析就有了多种选择。这时候,让用户进行选择似乎是最合理的解析策略了。(当然这里的 Optimizers 加上了引号,因为它已经不是基于数据模型进行优化处理了) 。

转换规则(Rules)在生成目标 XML 文件格式中的应用

数据模型里面的信息经过优化后,就可以输出或者序列化为满足目标 XML Schema 的数据文件。在这个过程中,我们又可以根据用户的转换要求执行一些通用的转换规则。比如在电子表单领域,用户经常有这样的转换要求:对转换后的电子表单文件,要求统一更改标签(Label)的前景颜色(Font color),统一更改页面(Page)的背景颜色 (background color),所有转换后的文件都要加入一个标准的包含企业标志(Logo)的 Toolbar 模版等等。这些转换要求可以以转换规则的形式存在。用户可以开发定制并应用自己的转换规则来批量转换原文件。

对比 Optimizers, 我们知道转换规则主要是针对目标文件的通用操作的。用户对目标文件的常用的操作都可以以 Rules 的形式存在于转换框架里。这就极大的丰富了格式转换的框架。

应用配置文件(Profile)管理 Optimizers 和 Rules

配置文件就是一个 XML 格式的文件,用以持久化管理所有的 Optimizers 和 Rules。用户可以通过定制 Optimizers 和 Rules 来配置自己的 Profile(通常情况下,每一种原文件的解析器都对应一个缺省默认的 Profile。系统还为所有解析器(包括用户定制的解析器,既第三方解析器)提供了一个可扩展的通用的 Profile)。在转换的过程中,需要加载 Profile,进而应用里面的优化器和转换规则来对数据模型进行深入处理,从而完成转换工作。清单 1. 给出了 Profile 文件的示例片段。

清单 1. Profile 文件示例
  1. <?xml version="1.0" encoding="UTF-8"?>
     
  2. <tns:profile xmlns:tns="http://formscentral.lotus.com/profile"
     
  3. http://sample.com.cn/profile
     
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     
  5. xsi:schemaLocation="http://sample.com.cn/profile ProfileSchema.xsd ">
     
  6. <id>com.ibm.conversion.demo.eform.form</id>
     
  7. <!-- version control is applied for developer -->
     
  8. <version>2</version>
     
  9. <desc>Sample .form Profile</desc>
     
  10. < !—- 假定有一个后缀名为 .form 的基于 XML 格式的电子表单文件 -->
     
  11. <format>form</format>
     
  12. <optimizers>
     
  13. <optimizer>
     
  14. <pluginId>com.ibm.conversion.demo.eform.optimizer.
     
  15. FAlignOptimizer</pluginId>
     
  16. <enable>yes</enable>
     
  17. <!—- 用户可以定制优化器的参数配置信息 -->
     
  18. <optimizerParameters>
     

  19.  
  20. </optimizerParameters>
     
  21. </optimizer>
     

  22.  
  23. </optimizers>
     
  24. <rules>
     
  25. <!--ChangeAppearance rule -->
     
  26. <rule>
     
  27. <pluginId>com.ibm.coversion.demo.eform.rule.ChangeAppearance</pluginId>
     
  28. <enable>no</enable>
     
  29. <location/>
     
  30. <!—- 用户可以定制转换规则的参数配置信息 -->
     
  31. <RuleParameters>
     

  32.  
  33. </RuleParameters>
     
  34. </rule>
     

  35.  
  36. </rules>
     
  37. </tns:profile>
复制代码
基于 Eclipse 的插件机制生成 XML 格式转换框架

基于 Eclipse PDE(Plug-in Development Environment), 我们开发出了灵活、可扩展的 XML 格式的电子表单文件转换框架。我们为解析器 (Parser), 优化器 (Optimizers) 和转换规则 (Rules) 都设置了扩展点(extension point)(读者可以看出,扩展点和 UI 框架都具有通用的价值)。用户可以通过插件机制开发定制自己的 Parser,Optimizers 和 Rules。如图 8 所示:

图 8. XML 格式转换的扩展点


清单 2. 框架的 Extension 示例
  1. <?xml version="1.0" encoding="UTF-8"?>
     
  2. <?eclipse version="3.2"?>
     
  3. <plugin>
     
  4. <extension
     
  5. point="com.ibm.coversion.demo.parser">
     
  6. <parser
     
  7. class="com.ibm.conversion.parser.eform.EformParser"
     
  8. ext="form|xml"
     
  9. id="com.ibm.conversion.parser.eform.EformParser"
     
  10. name="IBM Sample Parser"
     
  11. format="form"/>
     
  12. </extension>
     
  13. <extension
     
  14. point="com.ibm.coversion.demo.optimizer">
     
  15. <optimizer
     
  16. class="com.ibm.coversion.demo.eform.optimizer.FAlignOptimizer"
     
  17. description="%eform.alignOptimizer.description"
     
  18. id=" com.ibm.coversion.demo.eform.FAlignOptimizer"
     
  19. name="%eform.alignOptimizer.name">
     
  20. </optimizer>
     
  21. </extension>
     
  22. <extension
     
  23. point="com.ibm.coversion.demo.rule">
     
  24. <optimizer
     
  25. class="com.ibm.coversion.demo.eform.rule.ChangeAppearance"
     
  26. description="%eform.CARule.description"
     
  27. id="com.ibm.coversion.demo.eform.ChangeAppearance"
     
  28. name="%eform.CARule.name">
     
  29. </optimizer>
     
  30. </extension>
     
  31. </plugin>
复制代码
如清单 2 所示,开发者只要根据扩展点定义的 Schema 文件,就可以很容易的开发出满足需求的 extensions。不过用户在开发自己的 Optimizers 的时候,还有一些需要注意的事情。因为所有的 Optimizers 都应用在同一个数据模型上 , 如果 Optimizers 的执行顺序对输出结果有影响的话,建议开发者应组合优化自己的优化器。( 比如把 Profile 文件中 Optimizers 的位置顺序设定为优化器执行的先后顺序等等 )

另外读者在开发自己的 Optimizers 的时候,可以根据领域知识或目标 XML Schema 文件的优化需要,在数据模型的基础上构建自己的优化模型。把 Optimizers 对数据模型的相关操作封装在这个优化模型里,从而不会因为 Optimizers 的动态需求使得数据模型变的复杂难懂。

图 9 展示了 XML 格式转换框架的主向导(Wizard)页面 ( 注:.itx 文件实际上就是基于 XML 语法的电子表单文件 )。用户可以选择解析器和解析器相应的配置文件对原文件进行批量的转换。

图 9. 转换框架示例


如果开发人员想要基于此框架开发插件,比如,用户想把一种新型的基于 XML 语法格式的电子表单文件转换生成 IBM ®Lotus Forms 电子表单文件。开发者只需了解数据模型所提供的 API,然后开发一个解析器的 extension 就可以了。

小结

本文提供了一种 XML2XML 格式之间转换的通用解决方案。该方案的主要特点是构架灵活、可扩展,可以用来解决复杂文件格式的转换问题。当然用户可以进一步扩展这个转换构架。只要为非 XML 格式的文件写一个解析器,NON-XML2XML 的问题就会迎刃而解了。倘若读者根据模型里边的数据信息,为某一特殊文件格式写一个输出器(Output Writer)的话,那么任何两种文件格式的转换问题都可以基于此框架来解决了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一种 XML2XML 格式之间转换的解决方案(转) 的相关文章

  • 随记(2):PP-Tracking工具

    目标跟踪任务意义 需求 xff1a 自动驾驶 智慧城市 安防领域面向车辆 行人 飞行器等快速运行的物体实时跟踪及分析 算法优势 xff1a 单纯的目标检测算法只能输出目标的定位 43 分类 xff0c 无法对移动的目标具体的运动行为及运动特
  • 【ROS&GAZEBO】多旋翼无人机仿真(一)——搭建仿真环境

    ROS amp GAZEBO 多旋翼无人机仿真 xff08 一 xff09 搭建仿真环境 ROS amp GAZEBO 多旋翼无人机仿真 xff08 一 xff09 搭建仿真环境 ROS amp GAZEBO 多旋翼无人机仿真 xff08
  • 【ROS&GAZEBO】多旋翼无人机仿真(三)——自定义多旋翼模型

    ROS amp GAZEBO 多旋翼无人机仿真 xff08 一 xff09 搭建仿真环境 ROS amp GAZEBO 多旋翼无人机仿真 xff08 二 xff09 基于rotors的仿真 ROS amp GAZEBO 多旋翼无人机仿真 x
  • 当使用CUBEMX,STM32F429阿波罗开发板的PCF8574与1-Wire冲突的解决办法。

    hello 大家好 xff01 距离上次写博客还是上半年呢 这几个月做了很多实验 xff0c 不过都很懒 xff0c 一直没有写上来 准备慢慢补回来 下面是我在使用原子哥的STM32F429的开发板做温度传感器项目的小实验时遇到的问题 1
  • 【ROS&GAZEBO】解决“is neither a launch file in package ”的问题

    这两天有小伙伴问到在安装完rotors后出现如下问题 xff1a 这个问题其实是ros环境没有配置好 xff0c 运行下面的命令 xff0c 将catkub ws加入ros的工作空间 span class token function mk
  • 【ROS&GAZEBO】多旋翼无人机仿真(七)——四元数姿态控制

    ROS amp GAZEBO 多旋翼无人机仿真 xff08 一 xff09 搭建仿真环境 ROS amp GAZEBO 多旋翼无人机仿真 xff08 二 xff09 基于rotors的仿真 ROS amp GAZEBO 多旋翼无人机仿真 x
  • 【DRONECAN】(一)介绍

    DRONECAN 前言 笔者最近因为项目需要用到CAN通信 xff0c 所以研究了一下飞控上基于CAN的协议 xff0c 目前在Ardupilot和PX4中用的是DRONECAN xff0c DRONECAN是基于CAN的通信协议 xff0
  • 普通人对AI的看法

    就发展前景来看 xff0c 人工智能无疑将是现阶段与今后很长时间内的全球性热点 这是一个可以预见性的历史潮流 xff0c 无可阻挡 xff0c 一旦它出现一定会对现代互联网的结构会产 生颠覆性的改变 它将重新定义现代互联网的理念 xff0c
  • java+postgis实现根据两点生成模拟轨迹gps数据

    java 43 postgis实现根据两点生成模拟轨迹gps数据 文章目录 java 43 postgis实现根据两点生成模拟轨迹gps数据前言一 实现流程1 请求参数2 功能流程3 postgis重要使用函数介绍4 生成的GPS模拟轨迹点
  • Docker更新springboot容器镜像

    下载安装partainer 拉取镜像 docker pull portainer portainer ce 运行容器 docker run d p 9000 9000 v var run docker sock var run docker
  • AUTOSAR简介

    1 简介 AUTOSAR全称为 AUTomotive Open System ARchitecture xff0c 译为 汽车开放系统体系结构 xff1b AUTOSAR是一家由汽车电子 半导体和软件行业的汽车制造商 供应商 服务提供商等公
  • 基于sklearn的分类与回归基础总结

    一 分类 一 数据类型 1 python自带类型 span class token builtin list span span class token comment 列表 span span class token builtin tu
  • 回归模型 Boston房价预测

    一 加载数据集 将取值范围差异很大的数据输入到神经网络中 xff0c 这是有问题的 网络可能会自动适应这种取值范围不同的数据 xff0c 但学习肯定变得更加困难 对于这种数据 xff0c 普遍采用的最佳实践是对每个特征做标准化 xff0c
  • 卷积神经网络 猫狗识别

    一 卷积神经网络搭建 搭建框架 xff0c 需要使用卷积层和池化层 span class token keyword from span keras span class token keyword import span models s
  • Matlab学习笔记

    PART 0 xff1a 绪论 2018年9月11日 16 54 参考书籍 理论教程 MATLAB与计算方法 谢进 xff0c 李大美主编 武汉大学出版社 图书馆编号TP312MAX321 实践教程 MATLAB基础与运用 熊庆如主编 机械
  • 预训练卷积神经网络

    一 综述 预训练网络 xff08 pretrained network xff09 是一个保存好的网络 xff0c 之前已在大型数据集 xff08 通常是大规模图像分类任务 xff09 上训练好 如果这个原始数据集足够大且足够通用 xff0
  • 图片操作汇总

    1 keras preprocessing自带的图片处理器image xff0c 和tensorflow PIL中Image xff0c 返回的是同一种Image类型 span class token keyword from span k
  • 2020-10-22

    SSD Keras code解析 一 模型建立 1 1 重要标志参数 aspect ratios per layer span class token operator 61 span span class token punctuatio

随机推荐

  • 【无标题】

    沛公 xff08 刘邦 xff09 的军队驻扎在霸上 xff0c 没有能跟项羽相见 刘邦的左司马曹无伤就派人去告诉项羽说 xff1a 刘邦想占领关中称王 xff0c 让子婴做 xff08 他的 xff09 国相 xff0c xff08 相所
  • UORB

    uORB Micro Object Request Broker 微对象请求代理器 是PX4 Pixhawk系统中非常重要且关键的一个模块 xff0c 它肩负了整个系统的数据传输任务 xff0c 所有的传感器数据 GPS PPM信号等都要从
  • FreeRTOS - STM32中任务未进行调度问题

    将FreeRTOS源码移植到STM32F10X中 xff0c 编译通过 xff0c 烧录后 xff0c 发现开启的新任务没有运行 现象 xff1a 串口值仅仅打印了 printf 34 TesetesettettttttttttesT r
  • 使用TensorFlow Lite 部署自定义对象检测模型

    使用TensorFlow Lite 部署自定义对象检测模型 1 2022 03 05 文章目录 使用TensorFlow Lite 部署自定义对象检测模型 1 一 訓練自定義模型 4 1 收集數據2 訓練模型 二 集成TFLite模型的步驟
  • 使用docker安裝GPU版pytorch

    1 在docker pytorch 網址找到自己需要的環境 網址 https hub docker com r pytorch pytorch tags 点击复制 devel 版 连接 此处以 docker pull pytorch pyt
  • docker ssh连接

    docker ssh连接 1 进入docker span class token function passwd span span class token comment add root passward 记住自己设置的密码 xff0c
  • Docker容器显示图形到宿主机屏幕

    Docker容器显示图形到宿主机屏幕 在 docker 内 span class token function apt span span class token function install span xorg span class
  • Franka环境配置——从源码安装libfranka和franka_ros

    Franka安装ROS功能包 xff0c 有以下两种安装方式 xff1a 二进制包安装从源码安装编译 二进制包安装只要在终端输入一行命令就行 xff0c 很方便 但是功能包全部安装在根目录 xff1a opt ros kinetic sha
  • MeshLab——计算点云法向量求三角网格

    MeshLab 原始 1 点云分割 点击1后选中要删除区域 xff0c 点击2删除即可得到如下 xff1a 2 画三角网格 求法向量 Filters gt Normal Curvatures and Orientation gt Compu
  • XRDP--远程桌面连接(支持ubuntu16.04,18.04,20.04,22.04)

    XRDP 远程桌面连接 支持ubuntu16 04 18 04 20 04 22 04 1 环境 被控端 ubuntu 16 04 22 04 远控端 windows 2 具体操作 1 xff09 查看本机ip 终端输入 ifconfig
  • Jetson nano 卡刷教程

    Jetson nano 卡刷教程 所需用的的软件资源操作步骤 所需用的的软件资源 1 镜像 jetson nano jp451 sd card image zip 可自己在官网下载 https developer nvidia com em
  • dockers移盘&挂载

    docker 目录移动到其他磁盘的操作 systemctl stop docker 停止dockersystemctl status docker 查看docker服务状态mv var lib docker media li 1d10567
  • window docker 教程

    window docker 教程 1 docker windows 安装2 Docker Windows 修改默认镜像文件位置2 1 更改Docker Desktop设定2 2 创建文件链接2 3重新启动docker即可 1 docker
  • python导出环境依赖(requirements.txt)

    pip list format span class token operator 61 span freeze span class token operator gt span requirement txt 即可在同级目录得到一个re
  • 000-搭建Gitea-自己的git服务器

    000 搭建Gitea 自己的git服务器 1 什么是gitea 官网的介绍是 xff1a Gitea的首要目标是创建一个极易安装 xff0c 运行非常快速 xff0c 安装和使用体验良好的自建 Git 服务 我们采用Go作为后端语言 xf
  • 动态规划、贪心算法、分治算法的优缺点分析

    动态规划模型相对于静态规划模型的优点 xff1a 1 能够得到全局最优解 xff1b 2 可以得到一族最优解 xff1b 3 由于动态规划方法反映了动态过程演变的联系和特征 xff0c 在计算时可以利用实际知识和经验提高求解效率 动态规划模
  • 如何在vscode上运行调试C++(最简单的方法)

    Visual Studio Code vscode同样是微软出品的 支持 看上面的vside介绍吧 就省略了 人称宇宙第一编辑器 作为编辑器 它几乎支持所有的语言 对应语言风格的高亮 自动缩进 代码纠错 代码提示和代码补全等 要是有相应的编
  • visual studio中,已经安装完成后如何再安装其他组件(即在安装过程中未勾选的)怎么办?

    方法一 xff1a 控制面板 gt 程序 程序和功能 右键visual studio 单击更改 下面有三个按钮 单击更改 xff0c 把需要安装的组件全钩 xff0c 然后点击更改即可 1 在win10界面左下角搜索 控制面板 2 寻找程序
  • 安装好git包后,但在vsc中却提示:“ 未找到 Git。请安装 Git,或在 “git.path“ 设置中配置“的解决处理办法

    解决步骤 1 在官网安装好git管理工具包后 新建一个文件夹 然后用vsc打开该文件夹 效果下图所示 2 点选上图右侧的齿轮按钮 管理功能 后选中 34 管理扩展 34 功能 3 进入新的界面如下图所示 点开管理扩展后我们会看到Git扩展
  • 一种 XML2XML 格式之间转换的解决方案(转)

    一种 XML2XML 格式之间转换的解决方案 本文提供了一种 XML2XML 格式之间转换的通用解决方案 我们通过建立用以存储数据信息的数据模型 xff0c 并应用优化器 Optimizers xff0c 转换规则 Rules 对所存储的信