问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

pb 怎么读取xml格式的字符串

发布网友 发布时间:2022-05-06 18:18

我来回答

1个回答

热心网友 时间:2023-04-24 03:10

从pb9开始,DataWindow开始支持直接从XML文档中导入数据,将检索到的数据保存为XML文档,以及使用XSL格式对象(XSL-FO) 的新功能。本文根据XML Features in PowerBuilder® 9.0相关内容节选翻译。这是第一部分。
1、 数据窗口导出引擎(DataWindow Export Engine)

它是数据窗口新增的组件,主要利用导出模板(Export Templates)作为基础结构来转换行数据到XML格式数据。引擎通过分析模板内容格式化数据,然后输出到XML形式。因为模板本身也是XML文档,所以它首先也需要被解析。导出引擎通过XML解析器(XML Parser)的服务来分析模板文件。在低层,XML解析通过C++和Apache Xerces实现,利用一个适配器接口(pbxerces90.dll)来访问Xerces解析器。
2、导出模板(Export Templates)

一个导出模板定义了数据窗口元素(DataWindow elements)和XML对应关系。

下面的数据窗口对象可以使用在导出模板:

• 列(Column)
• 计算列(Computed Column)
• 文本(Text Control)
• 计算域(Computed Field)
• 内嵌报表(Nested Report)

上面的数据窗口对象可以被映射到以下的XML构造

• 元素(Element)
• 属性 (Attribute)

注意:注释(comments)和处理指令(processing instructions)可以被添加到模板的任意部分,但是不能和其建立映射。CDATA可以被添加到任何元素之内,但是也不能被映射。内嵌报表(Nested Report)只能和元素建立映射,不能是属性。

当导出引擎分析XML模板内容时,根据模板中已经定义的映射关系,将元素映射到实际的数据窗口控件和它们的文本内容。在映射操作成功完成后,引擎将借助XML Parser/Generator Engine的帮助,实现最后的XML语法生成。

导出引擎是数据窗口定义的一部分。一个数据窗口可以定义多个导出模板,模板作为数据窗口一个关联的对象被保存在PBL和SRD当中。这里引入一个新的数据窗口属性:Export.XML.UseTemplate,用来指定在某次导出操作中使用的模板对象名称。在程序运行(runtime)和设计(designtime)时都可以修改这个属性。XML导出模板的语法见列表1:

列表 1: XML export template syntax (indented for clarity)

export.xml(
usetemplate="t_orders"
metadatatype=2 savemetadata=1
template=(
omment="Order items with external DTD"
name="t_orders"
publicid="c:\xmldw\orders.dtd"
xml="<?xml version=~"1.0~"
encoding=~"UTF-8~"
standalone=~"no~"?>
<!DOCTYPE Orders>
<Orders><!-- omitted for brevity --></Orders>"
)
)

pb9中数据窗口的XML特性(二、编辑导出模板)

在PowerBuilder 9.0中数据窗口编辑画板新增了定义和编辑XML导出模板的视图。视图中用TreeView展示模板的结构,XML实体(entities)被表示成树的节点,并利用不同的图标和字体颜色区别实体的类型。文本数据被显示为各自元素节点的子节点,在这里,元素的结束标签(end-tags)以及标签定界符(Markup delimiters)被隐藏了,但都是存在的。

编辑时候,仅仅只有一个导出模板可以在视图中打开。

图1:数据窗口画板中的新建XML导出模板视图

表1:列举了导出模板中所有可能的XML构造

通过在treeview的右键点击弹出菜单操作,可以对模板进行新建、打开、编辑、删除等操作。

个别菜单项说明:

根节点弹出菜单项中:
Schema Options… :弹出对话框,可以编辑当使用内嵌XML schema 模式的根节点元素 以及命名空间(namespace)的前缀(prefix)和URI.

导出模板细节部分(Export Template Detail Section)

如图1,我们可以看到一条灰线,该灰线的作用是分隔出模板的 header section和detail section,有些类似于数据窗口编辑画板中的细带(detail band)。通过选择某个元素节点的“'Starts Detail”右键菜单项,该条线可以被重新定位到该位置。此元素节点就被指定为Detail 开始元素.

只有一个元素可以被指定为Detail 开始元素。根节点不能成为Detail 开始元素。在默认情况下,根节点元素的第一个子节点被指定为Detail 开始元素。在导出时候,只有Detail 开始元素以及它的兄弟和子节点会逐行迭代的生成,这个特点和数据窗口的header和detail区域类似。

在数据窗口元素和XML节点间建立映射(Mapping DataWindow Elements to XML Nodes)

当目标导出XML文档的结构确定后,就可以创建模板了。当选择New Default菜单项时,新建的模板将自动将元素映射到数据窗口列和计算列上。如果你想导出的XML文档的结构与默认模板不同,就需要自定义或者修改导出模板,方法是先修改节点标签,然后定位在某个节点上,在“DataWindow Control reference dialog”弹出对话框中选择对应的数据窗口控件对象。

注意:任何映射到XML元素的数据值,都会被当作字符,无视对应列其实际的数据类型(number, date等等)。

pb9中数据窗口的XML特性(三、导出XML)

一、导出XML方法(Exporting XML)

DataWindow 或者DataStore中的数据都可以导出到XML形式,方法和导出PSR或者TXT等格式类似。具体可以使用以下几种方法:

1、在数据窗口画板编辑状态,当Preview视图打开时候,选择Save Rows As菜单项;
2、使用SaveAs()函数
dw_1.SaveAs( "c:\foo\bar.xml", XML!, TRUE )
3、使用数据窗口点符号属性方式
ls_xml = dw_1.object.datawindow.data.xml
4、使用数据窗口Describle函数
ls_xml = dw_1.Describe( "datawindow.data.xml")
二、与导出XML有关的DataWindow属性

数据窗口XML相关属性决定了导出XML文档的相关形式,有以下属性:

1、导出时候使用哪一个模板

dw_1.Object.DataWindow.Export.XML.UseTemplate = "value"

2、导出时候元数据的类型(MetaDataExternal!, MetaDataInternal!),即DTD\Schema是内签在导出XML文件中,还是以单独的文件存在

dw_1.Object.DataWindow.Export.XML.MetaDataType = "value"

3、导出时候那种元数据的将被同时保存(XMLDTD!, XMLSchema!, XMLNone!) 注: DTD和XML Schema都用来定义XML中数据表示的语法格式。

dw_1.Object.DataWindow.Export.XML.SaveMetaData = "value"

4、导出时候XML header data在detail rows中是否重复(类似于按header data分组)

dw_1.Object.DataWindow.Export.XML.HeadGroups = "value"

5、导出文件是否允许空白(white space)存在

dw_1.Object.DataWindow.Export.XML.IncludeWhiteSpace = "value"

pb9中数据窗口的XML特性(四、导入XML)

一、导入XML方法(Importing XML)

符合格式的XML数据可以导入到DataWindow或者DataStore中,具体方法如下:

1、从XML文件中导入
dw_1.ImportFile( XML!, "c:\foo\bar.xml" {*} )

2、从包含XML的字符串中导入
dw_1.ImportString( XML!, ls_xml {*} )

3、从剪贴板中导入XML数据
ls_xml = dw_1.ImportClipboard()

{*} 指函数的可选参数
二、与导入XML有关的 DataWindow属性

1、Import.XML.UseTemplate 导入时候XML必须匹配哪一个模板

2、Import.XML.Trace 导入时是否将trace信息记录到文件中

3、Import.XML.TraceFile 导入时产生的trace信息所保存的文件名

如果Trace选项打开,而TraceFile没有定义,则产生的trace信息自动记录到当前目录下的pbxmtrc.log文件。
三、判断XML是否格式良好(well formed)和符合特定语法(complies with a specified grammar)

可以在导入之前使用XMLParseFile 、XMLParseString 方法来判断XML是否well formed。

long ll_ret

ll_ret = XMLParseFile("c:\temp\mydoc.xml")

if ll_ret = 0 then dw_1.ImportFile("c:\temp\mydoc.xml")
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
“苏大强”的本意是什么?抹黑江苏吗? 伦敦奥运会入场式各个国家和地区的先后顺序 参加奥运会入场式的前后顺序 神马是费用性斜视?没听说过,斜视不就是斗鸡眼么 小儿斜视原因 为了不出现重影,右眼会被推到外斜视眼位,称为“废用性斜视” 在八岁时玩鞭炮炸伤左眼,而形成左眼斜视,现在能治好吗 ...后左眼斜视外斜 左眼下半部有光感 视觉模糊 请问左手术的话 能恢复... 两眼视力差距大会怎么样 关于耳洞的小问题~有经验的和懂行的进~ pb编程中读出字符串中的数字 pb 字符串拆分 谁帮忙解释一下PB中MID函数的这个用法 PB中取字符串子串的函数是什么 在PB中的截取字符串函数是哪个,在线等待 pb中怎么截取含有汉字的字符串而不出现半个字符 pb sql字符串截取 pb中的mid函数解释,该怎么解决 PB 怎么截取这种字符串 pb里面如何提取截取字符串的前两位? 非独立分公司用报税吗 那种贴在墙上,用来粘贴照片或钉些纸头在上面的板是什么板啊 抖音里很火的呢种蹦床,穿着特制的不粘胶衣服,跳起来能粘在墙上的是什么 这种能贴墙上的东西叫啥? 糠糟之妻不下堂重点词翻译 在steam上买了光之子,但是要通过uplay平台才能玩,然后在育碧上需要激活代码,我去steam上激活产品 - 信息提示 341281是哪里的身份证号码 通用PE工具箱如何安装win7 六月份了买那只股票好 PB从数据库中读取字符串,实现代号匹配相应的名称将最后结果拼接在同一个字段里 PB中测量字符串长度的语句怎么写 PB中字符串替换 pb里如何取双字节的字符的低位字节或ASCII码 PB如何在STRING里插入和删除字符或字母 在PB中如何使用一个字符串给一个字符串数组赋值 联想新园梦H520台式机怎么进去BIOS界面设置U盘为第一启动项?我电脑开机找不到BOOT,要具体 齐齐哈尔104路车,最后一班车几点收? 天津滨海新区104路首末班时间/ 2020年2月11号北京到燕郊公交运行吗? 谁知道104路多久一趟车阿? 运城到临猗104路公交车多长时间一班? 苹果手机接不显示内容怎么设置 螃蟹和什么能一起吃吗 螃蟹和什么食物,不能放在一起吃? 螃蟹和苹果能一起吃吗? 螃蟹和胡萝卜能一起吃吗 投稿方式有哪些 如何向上海文汇报投稿?投稿方式? 投稿的方法与途径应用最普遍的是?