用XSL翻译Web服务应用程序
Web服务应用程序常常面临一个挑战:后端软件不支持或不完全支持XML格式。为了解决这一难题,许多架构设计中引入了翻译阶段,负责接收到的XML并将其转换成后端系统能够识别的格式。可扩展样式表语言(XSL)为此提供了一个强大、标准且对XML友好的解决方案。
在XML消息和应用程序之间,存在多种可能需要翻译的元素。这其中涉及的问题包括查询、映射、聚合、分割、公式运算以及重排序等。
查询处理涉及接收值并为目标系统映射到不同的值。比如,你的XML中有一个值“309”,而应用程序需要的是对应的描述“Uber Widget”。映射是这一过程的核心,它将来自一个字段的值重新分配到另一个字段。在XML中,例如,你可能需要将“AountNumber”元素映射到一个新的元素“CustomerAountNumber”。
聚合处理则将来自XML的两个或更多项目组合成一个适合后端系统的单一项目。例如,将姓和名字段合并为单一的“全名”字段。分割则是聚合的逆操作,将一个值拆分成两个或更多组件。
公式处理通常涉及对一个或多个XML值的计算,以生成适用于新应用程序的值。例如,使用XML中的子订单信息来计算总订单量。而重排序则改变XML中项目的顺序或结构,以匹配目标系统的要求。
让我们通过一个具体的例子来详细解释这个过程。假设我们收到的XML订单如Listing 1所示:
Listing 1: webserviceorder.xml
```xml
```
我们的订单系统需要的是稍微不同的格式。我们需要将从Web服务接收的订单转换为Listing 2中的格式。这个过程就需要我们进行一系列的映射、聚合、分割、公式运算和重排序操作,以确保数据能够正确无误地传递给后端系统。在技术的海洋中,我们遇到了一种新的挑战:将XML文件的内容按照需求进行转换。这次,我们面对的是名为"applicationorder.xml"的文件。在这个文件中,信息按照一定的结构进行排列,看起来像这样:
```xml
```
面对这样的结构,我们的任务是将它转换成适合应用程序使用的格式。这个过程听起来复杂,但实际上,由于有XSL(可扩展样式表语言)的帮助,我们可以轻松完成。
这是一个经过简化的例子,所以我们在转换格式的时候,需要做的事情并不多。我们需要注意的关键是元素映射。例如,我们将"Order"映射为"NewOrder","AountNumber"映射为"CustomerAountNumber","OrderNumber"映射为"CustomerOrderNumber",以此类推。这是一个简单的翻译过程,我们只需在XSL模板中定义新元素,并指明这个新元素接收来自原始XML文档的元素值。
接下来是对"Items"的重排序。这个过程需要我们把"Item"子模板放入一个名为"OrderItems"的新元素里。为了实现这一点,我们可以使用XPath表达式进行计算。这个表达式能够遍历所有的OrderItem元素,并将它们整合到一个新的OrderItems元素下。在这个过程中,我们还需要加入一个新的元素——"Subtotal",这个元素会根据商品的单价和数量进行计算,得出每个商品的小计。这个计算可以通过在XSL模板中添加一个表达式来完成。这个表达式会接收商品的价格和数量,然后执行计算。
最终的结果是一个经过转换的XML文件,它符合应用程序的需求。这个转换过程是通过XSL文档实现的,这个文档定义了如何从原始XML文件中提取信息,以及如何组织这些信息以生成新的XML文件。Listing 3展示了完成这个转换的XSL文档。这份文档包含了所有必要的指令和表达式,使得我们可以轻松地将收到的XML转换成适合应用程序使用的格式。这就是我们在处理XML文件时所面临的挑战,也是我们的解决方案。转化翻译文件:translate.xsl的魅力与重要性
在这份由Brian Schaffner撰写的文档中,我们接触到了一个名为translate.xsl的XSLT文件。该文件以XML格式呈现,用于处理特定的数据转换任务。作为富士通咨询公司的副主任,Brian为富士通的技术咨询公司提供架构、设计和开发支持,而这份translate.xsl文件就是他在实践中运用XSLT(可扩展样式表语言转换)的范例。
在XML的世界中,XSLT扮演着极其重要的角色。它是一种用于转换XML数据的语言,能将XML数据从一种格式转换为另一种格式。在列表中显示的translate.xsl就是一个很好的例子,它可能是用来将一个订单数据的格式转换成另一种期望的格式。
编程语言
- 用XSL翻译Web服务应用程序
- vue.js国际化 vue-i18n插件的使用详解
- ASP.NET比较常用的26个性能优化技巧
- jquery.uploadView 实现图片预览上传功能
- JS与CSS3实现图片响应鼠标移动放大效果示例
- Git可视化教程之Git Gui的使用
- jQuery实现的简洁下拉菜单导航效果代码
- js如何判断访问是来自搜索引擎(蜘蛛人)还是直接
- 基于JS实现类似支付宝支付密码输入框
- 利用百度地图API获取当前位置信息的实例
- vue-lazyload图片延迟加载插件的实例讲解
- jQuery实现点击弹出背景变暗遮罩效果实例代码
- 数据库中使用正则表达式小结
- Vue实现左右菜单联动实现代码
- 对Web开发中前端框架与前端类库的一些思考
- ASP.NET Mvc开发之EF延迟加载