当前位置: 首页 > news >正文

第十二章 控制值的转换

文章目录

  • 第十二章 控制值的转换
  • 介绍
  • 处理特殊 `XML` 字符
        • 文字和 `SOAP` 编码格式的转义形式
  • 示例
  • 防止泄漏的另一种方法

第十二章 控制值的转换

类和属性参数

  • ESCAPE

  • CONTENT

  • XMLTIMEZONE

  • DISPLAYLIST

  • VALUELIST

  • XMLDEFAULTVALUE

  • XMLLISTPARAMETER

  • XMLSTREAMMODE

介绍

支持 XML 的对象通常包括由 IRIS 数据类型定义的属性。每个数据类型类都定义 LogicalToXSD()XSDToLogical() 方法。每当为对象请求 XML 输出时, IRIS XML 工具都会自动为每个属性调用 LogicalToXSD() 方法,以将数据转换为在 XML 中使用的适当格式。同样,每当使用 XML 文档作为输入时,IRIS XML 工具都会调用 XSDToLogical() 方法将数据转换为 IRIS 的正确格式。

例如,数据类型类的 %Binary 中,LogicalToXSD() 方法使用 $SYSTEM.Encryption.Base64Encode() 方法转换出站值。同样,XSDToLogical() 方法使用 $SYSTEM.Encryption.Base64Decode() 方法转换入站值。

IRIS 类还可以包含流值属性,但流类不定义 LogicalToXSD()XSDToLogical() 方法。相反,当流类用作支持 XML 的类的属性时,XML 工具会特别对待它们。具体来说:

  • 字符流的处理方式与字符串相同。默认情况下,除了由于 XML 特殊字符的存在而需要进行的更改之外,不会进行任何更改,如下一节所述。
  • IRIS 导出到 XML 时,它会将二进制流属性转换为采用 Base-64 编码的字符串(也就是说,它以这种方式对数据进行编码,然后将其导出)。当 IRISXML 导入时,它会执行相反的操作。

当使用支持 XML 的对象时,有时需要考虑无法直映射影到 XML 的值或由于其他原因想要转换的值的特殊情况。

处理特殊 XML 字符

根据上下文,当 IRIS XML 支持在字符串或字符流类型的属性中找到与符号 (&) 和某些其他字符时,它会转义这些字符。

注意:ESCAPE 属性参数控制哪些字符被识别为特殊字符。此参数是“XML”(默认值)或“HTML”(文档中未讨论)。

对于这些特殊字符,可以通过设置 CONTENT 属性参数来控制转义的执行方式。文字格式和编码格式的详细信息有所不同,如下所示:

文字和 SOAP 编码格式的转义形式

Value of CONTENT (Case-insensitive) |XML Document in Literal
Format| XML Document in SOAP-encoded Format
—|—|—
"STRING" (the default) |CData |CData
"ESCAPE"| XML entity |XML entity
"ESCAPE-C14N| XML entity* |XML entity*
"MIXED" |No escaping is done| CData

*对于“ESCAPE-C14N”,转义是根据XML规范化标准完成的。主要区别在于回车符被转义为 &#13

示例

Class ResearchXForms.CONTENT Extends (%RegisteredObject, %XML.Adaptor)
{Parameter XMLNAME = "Demo";Property String1 As %String;Property String2 As %String(CONTENT = "STRING");Property String3 As %String(CONTENT = "ESCAPE");Property String4 As %String(CONTENT = "MIXED");}

String2String1 始终以相同的方式处理,因为 String2 使用 CONTENT 的默认值。

此类的文字 XML 输出可能如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<Demo><String1><![CDATA[value 1 & value 2]]></String1><String2><![CDATA[value 1 & value 2]]></String2><String3>value 1 &amp; value 2</String3><String4>value 1 & value 2</String4>
</Demo>

SOAP 编码的 XML 输出将如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<CONTENT xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" 
xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><String1><![CDATA[value 1 & value 2]]></String1><String2><![CDATA[value 1 & value 2]]></String2><String3>value 1 &amp; value 2</String3><String4><![CDATA[value 1 & value 2]]></String4>
</CONTENT>

防止泄漏的另一种方法

还有另一种方法可以防止特殊 XML 字符的转义。可以将该属性定义为特殊 XML 类型之一:%XML.String%XML.FileCharacterStream%XML.GlobalCharacterStream。对于这些数据类型类,CONTENT“MIXED”

http://www.lryc.cn/news/238648.html

相关文章:

  • SQL并集、交集、差集使用
  • 【双指针】盛水最多的容器
  • win11,引导项管理
  • YoloV8改进策略:WaveletPool解决小目标的混叠问题,提高小目标的检测精度
  • JavaScript中的假值对象是什么?
  • 求二叉树的最大密度(可运行)
  • V100 GPU服务器安装CUDNN教程
  • RT-Thread Hoist_Motor PID
  • css 实现文字流光效果
  • 3D格式转换工具
  • seismicunix基础-声波波动方程推导
  • 2024电脑录屏软件排行第一Camtasia喀秋莎
  • MQTT通信协议使用说明
  • mysql底层是如何存放数据的
  • 【代码随想录】刷题笔记Day33
  • AD从原理图到PCB超详细教程
  • 2023.11.20使用flask做一个简单图片浏览器
  • https和http的区别和优势
  • Docker 启动alpine镜像中可执行程序文件遇到 not found
  • .net对接阿里云CSB服务
  • Json数据格式
  • Kafka-Producer
  • Ubuntu20上离线安装samba
  • 【开源】基于Vue.js的教学过程管理系统
  • 【C++】泛型编程 ⑪ ( 类模板的运算符重载 - 函数实现 写在类外部的不同的 .h 头文件和 .cpp 代码中 )
  • 动手学深度学习——循环神经网络的简洁实现(代码详解)
  • 19.删除链表的倒数第 N 个节点
  • 机器人制作开源方案 | 莲花灯
  • 华为无线ac+fit三层组网,每个ap发射不同的业务vlan
  • 人工智能:科技之光,生活之美