点击或拖拽改变大小

Functions.CursorToXML 方法

X#
-- todo --
将X#游标转换为XML。

命名空间:  XSharp.VFP
程序集:  XSharp.VFP (在 XSharp.VFP.dll 中) 版本:2.22 GA
语法
 FUNCTION CursorToXML(
	uArea,
	cOutput,
	nOutputFormat,
	nFlags,
	nRecords,
	cSchemaName,
	cSchemaLocation,
	cNameSpace
) AS USUAL CLIPPER
查看代码

参数

uArea (Optional)
类型:__Usual
指定要从中创建XML字符串的表的工作区号或别名。 如果指定0或不指定值,X#将使用当前工作区。
cOutput (Optional)
类型:__Usual
指定结果发送到的路径和文件名或内存变量名。 如果nFlags设置为0(默认)用于内存变量输出,XML将返回到内存变量。 如果内存变量不存在,将创建它。 如果nFlags设置为512用于文件输出,且文件不存在,将创建该文件。 如果文件已存在,将被覆盖。遵守Set SAFETY的设置。
nOutputFormat (Optional)
类型:__Usual
指定XML字符串的输出格式。备注部分的表列出了nOutputFormat的值。
nFlags (Optional)
类型:__Usual
指定生成的XML的格式及其目标。备注部分的表列出了nFlags的值。
nRecords (Optional)
类型:__Usual
指定要输出到XML的记录数,默认值为0。
如果nRecords为0,则输出所有记录。如果nRecords大于表中剩余的记录数, 将输出所有剩余记录。
cSchemaName (Optional)
类型:__Usual
指定包含cOutput中数据的架构信息的名称和位置,例如"MySchema.xsd"。 如果未提供扩展名,将使用.xsd扩展名创建架构文件。
备注部分的表列出了cSchemaName的值。
cSchemaLocation (Optional)
类型:__Usual
指定读取XML数据的应用程序应查找架构文件的可选位置。
备注 备注:
仅在将架构部署到XML数据位置以外的位置时使用此参数。
cSchemaLocation的内容是生成的XML数据的xsi:schemaLocation或xsi:noNamespaceSchemaLocation属性。
cschemaLocation参数可以是HTTP地址或其他URI。您需要将架构文件复制到cSchemaLocation中指定的位置。 以下示例生成XML数据:
X#
1CURSORTOXML("LABELS", "myXMLFile.xml", 1, 512, 0, ;
2"mySchema.xsd", "http://www.microsoft.com/mySchema.xsd")
包含以下属性:
X#
1xsi:noNamespaceSchemaLocation=" http://www.microsoft.com/mySchema.xsd"
当cSchemaName为空时指定cSchemaLocation会导致相同的属性被写入XML数据。 这使得您可以指向现有架构,而无需在每次调用CURSORTOXML( )时重新创建架构。
cNameSpace (Optional)
类型:__Usual

返回值

类型:__Usual
数值数据类型。CURSORTOXML( )返回写入文件或内存变量的字节数。
备注
您可以将CURSORTOXML( )与X#的OLE DB提供程序一起使用。但是,_VFPVFPXMLProgID属性不 受支持,因为OLE DB提供程序不支持_VFP系统变量。
要将X# OLE DB提供程序与CURSORTOXML( )一起使用,您必须在安装OLE DB提供程序的计算机上安装MSXML 3.0。
备注 备注:
CURSORTOXML( )的输出遵循游标索引顺序、Set Fields TO和当前筛选器设置。
但是,它不保留游标位置。调用CURSORTOXML( )后,如果输出所有记录, 游标记录指针将报告EOF。如果未输出所有记录,它将指向最后一条输出到XML的记录。
如果表包含Double数据类型值,则CURSORTOXML( )生成的XML将包含与导出表相同的小数位数。 例如,如果使用以下代码创建具有6位小数的Double列,则生成的XML将包含小数点右侧的六位数字:
X#
1Create Table test (col1 b(6))
当您使用CURSORTOXML( )函数将表或游标导出到XML时,根节点始终称为"VFPData", 无论输出格式如何。 仅对于Date类型,您可以使用CURSORTOXML( )导出"空"DateDateTime类型。 但是,XML架构验证可能会失败,因为在XML架构定义(XSD)架构中,"空"对这些类型无效。 这仅在需要架构且生成的XML针对可以解释XSD架构的XML解析器进行验证时才是问题。 要解决此问题,您可能需要通过调用适当的Select语句来更改数据为非空表示, 并对创建的游标使用CURSORTOXML( )。例如,您可以将空DateDateTime值更改为.NULL.
X#
1Select orderid, EVL(shippeddate,.NULL.) as ShippedDate From orders
您还可以将空DateDateTime更改为"空"的适当表示:
X#
1Select orderid, IIF(EMPTY(shippeddate),{^1899-12-30 00:00:00},tc11);
使用标志32768时,标志16和32的设置可能会影响应用哪个代码页,具体取决于您要写入XML的数据类型。 下表显示了设置的可能组合以及每种组合应用的代码页。 对于使用32768标志写入的XML文档,应用以下代码页。
标志16标志32设置标志32768
未设置未设置 XML文档:Windows-1252。
Unicode数据:代码页1252。
字符数据:默认代码页,除非字段标记为NOCPTRANS
True (.T)未设置 XML文档:加上游标的CodePage属性。
如果XMLField CodePage属性大于零(0)且与游标的代码页不匹配,则报告错误。
Unicode数据:游标对象的Code page属性。
字符数据:无。改用来自X#表(.dbf)的原始数据。
未设置设置 XML文档:UTF-8代码页。
Unicode数据:UTF-8代码页。
字符数据:默认代码页,除非字段标记为NOCPTRANS, 在这种情况下不会进行额外的字符转换为UTF-8。
设置设置 XML文档:UTF-8代码页。
Unicode数据:UTF-8代码页。
字符数据:默认代码页,除非字段标记为NOCPTRANS,在这种情况下,数据使用 SYS(3005)设置转换为UTF-8。
对于未设置32768标志写入的XML文档,应用以下代码页。
标志16标志32不带32768标志
未设置未设置 XML文档:Windows-1252。
Unicode数据:代码页1252。
字符数据:默认代码页,除非字段标记为NOCPTRANS
True (.T)未设置 XML文档:游标的CodePage属性。
字符数据:无。改用来自X#表(.dbf)的原始数据。
Unicode数据:游标对象的代码页属性。
未设置设置 XML文档:UTF-8代码页。
Unicode数据:UTF-8代码页。
字符数据:默认代码页,除非字段标记为NOCPTRANS, 在这种情况下不会进行额外的字符转换为UTF-8。
设置设置 XML文档:UTF-8代码页。
Unicode数据:UTF-8代码页。
字符数据:默认代码页,除非字段标记为NOCPTRANS,在这种情况下, 它们使用当前SYS(3005)设置的代码页转换为UTF-8。
nOutputFormat描述
1 – ELEMENTS(默认)以元素为中心的XML
2 – ATTRIBUTES以属性为中心的XML
3 – RAW通用的、以属性为中心的XML
nFlags输出描述
00000 (默认)以UTF-8格式生成XML。
当cOutput指定时,如果内存变量不存在,此设置会创建一个内存变量并将XML返回到该内存变量。
XML声明不包含Encoding=属性;也就是说,没有设置编码属性为UTF-8。
10001生成未格式化的XML作为连续字符串。
20010用开放和闭合元素包围空元素,例如,<cc04></cc04>。
40100保留字段中的空白。
81000将Memo字段包装在CDATA部分中。
1610000 输出编码。输出设置为游标代码页。
为确保准确的字符转换,X#默认代码页必须与游标的代码页匹配。
您可以通过将游标中的字符和备注字段设置为NOCPTRAN(字符二进制/备注二进制)来实现这一点。
使用任何代码页的表设置此值时,XML中的编码属性设置为空字符串("")。要更改为正确的编码属性,请使用STRTRAN()函数。
例如,对于代码页936,为结果XML字符串提供以下内容:
X#
1strxml=STRTRAN(strxml, 'encoding=""', 'encoding="gb2312"'
32100000输出编码。
5121000000000 输出到cOutput指定的文件。 如果文件不存在,则创建它。如果文件已存在,则覆盖它。遵守Set SAFETY的设置。
40961000000000000 禁用base64编码。
CURSORTOXML()将Memo(二进制)字段导出为xsd:base64binary,除非您使用nFlags设置为4096。
在X#中,base64编码仅用于编码二进制数据。
32768指示应使用代码页。
下表描述了当输出编码默认为游标或表代码页时,如何写入编码属性。
备注 备注:
通过组合第4位和第5位(0010000)设置编码标志。
编码标志第4位和第5位描述
+000(默认)Windows-1252
+1601将输出编码属性设置为游标代码页。
+3210将输出编码属性设置为UTF-8,不进行字符转换。
+4811将输出编码属性设置为UTF-8,并将字符数据转换为UTF-8。
下表列出了常见的Windows兼容代码页。
代码页平台XML声明中的编码属性注释
437MS-DOS,美国ibm437
850MS-DOS,国际ibm850
865MS-DOS,北欧空字符串 ("")
866MS-DOS,俄罗斯cp866
932Windows,日语shift-jis
936简体中文gb2312
949Windows,韩语iso-2022-kr 或:
ks_c_5601-1987
950Windows,繁体中文(台湾)big5
1250Windows,东欧Windows-1250注意大小写。
1251Windows,俄罗斯Windows-1251
1252Windows,美国,西欧Windows-1252
1253Windows,希腊Windows-1253
1254Windows,土耳其Windows-1254
1255Windows,希伯来Windows-1255
1256Windows,阿拉伯Windows-1256
备注 备注:
X#使用Windows-1252作为默认编码。使用双字节字符集(DBCS)时,您可以指定将编码属性设置为匹配代码页, 例如Big5(代码页950),用于X#支持代码页的DBCS语言。
使用Windows-1252和DBCS时,不需要额外的字符转换就可以在Internet Explorer中正确显示。
然而,为了使XML更符合可以解释UTF-8的Web浏览器,您可以选择将编码属性设置为 UTF-8而不是Windows-1252。只有当您将nFlags设置为48时(将编码属性指定为UTF-8并将字符数据转换为UTF-8格式), 结果集才会进行转换为UTF-8字符。这仅在数据实际包含双字节字符时才需要。如果您只输出拉丁(单字节)字符, 则不必使用字符转换,例如STRCONV()
cSchemaName描述
cSchemaName 指定架构的外部文件的名称和路径(限定于XML的根元素)。
备注 备注:
如果cSchemaName包含文件名,而cSchemaLocation未提供或为空白,则cSchemaName的内容将成为XML中的xsi:schemaLocation或 xsi:noNamespaceSchemaLocation属性。
在以下示例中,X#从"Labels"别名中的Labels.dbf文件生成一个名为MyXMLFile.xml的通用XML文件,并在同一文件夹中生成名为 MySchema的架构文件。
X#
1CURSORTOXML("LABELS", "myXMLFile.xml", 1, 512, 0, "mySchema.xsd")
如果cSchemaName包含URI,架构将被写入当前目录,并且必须上传到服务器才能被浏览器或解析器访问。 外部架构始终被写入与XML文件相同的位置。
"1" 指定生成内联架构。例如,以下代码生成内联架构:
X#
1CURSORTOXML("LABELS", "myXMLFile.xml", 1, 512, 0, "1")
""指定不生成架构。
参见