分类:
2010-03-03 15:42:03
本文转自:http://blog.csdn.net/wu_07/archive/2005/12/22/559362.aspx 一、原理 从pb9开始,DataWindow开始支持直接从XML文档中导入数据,将检索到的数据保存为XML文档,以及使用XSL格式对象(XSL-FO) 的新功能。本文根据XML Features in PowerBuilder® 9.0相关内容节选翻译。这是第一部分。 1、 数据窗口导出引擎(DataWindow Export Engine)
一个导出模板定义了数据窗口元素(DataWindow elements)和XML对应关系。 下面的数据窗口对象可以使用在导出模板: • 列(Column) 上面的数据窗口对象可以被映射到以下的XML构造 • 元素(Element) 注意:注释(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( 二、编辑导出模板 在PowerBuilder 9.0中数据窗口编辑画板新增了定义和编辑XML导出模板的视图。视图中用TreeView展示模板的结构,XML实体(entities)被表示成树的节点,并利用不同的图标和字体颜色区别实体的类型。文本数据被显示为各自元素节点的子节点,在这里,元素的结束标签(end-tags)以及标签定界符(Markup delimiters)被隐藏了,但都是存在的。 编辑时候,仅仅只有一个导出模板可以在视图中打开。 图1:数据窗口画板中的新建XML导出模板视图 表1:列举了导出模板中所有可能的XML构造 通过在treeview的右键点击弹出菜单操作,可以对模板进行新建、打开、编辑、删除等操作。 个别菜单项说明: 根节点弹出菜单项中:
如图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等等)。
一、导出XML方法(Exporting XML) 1、在数据窗口画板编辑状态,当Preview视图打开时候,选择Save Rows As菜单项; 二、与导出XML有关的DataWindow属性 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" 四、导入XML 一、导入XML方法(Importing XML) 1、从XML文件中导入 2、从包含XML的字符串中导入 3、从剪贴板中导入XML数据 {*} 指函数的可选参数 二、与导入XML有关的DataWindow属性 2、Import.XML.Trace 导入时是否将trace信息记录到文件中 3、Import.XML.TraceFile 导入时产生的trace信息所保存的文件名 如果Trace选项打开,而TraceFile没有定义,则产生的trace信息自动记录到当前目录下的pbxmtrc.log文件。 三、判断XML是否格式良好(well formed)和符合特定语法(complies with a specified grammar) long ll_ret ll_ret = XMLParseFile("c:\temp\mydoc.xml") if ll_ret = 0 then dw_1.ImportFile("c:\temp\mydoc.xml") |