PB怎么调用msxml解析xml

PB怎么调用msxml解析xml,第1张

一、什么是DOM ◆文档对象模型(Document Object Model) 1、作为一项W3C规范,XML

DOM存在目的是为不同类型的应用程序提供一个标准的编程接口,它被设计可以跨平台、跨语言使用。 2、我们可以利用XML

DOM创建XML文档并 *** 纵其结构,增加、修改、删除元素

3、程序中调用XML解析器载入XML文档到内存中。当文档被载入后,可以通过进入DOM检索和 *** 作相关信息。 4、DOM

保存了XML文档树,文档(document)元素位于整棵树的最顶层。该元素可以有一到多个子节点来保存树的结构。

可以参阅以下网站:http://www.w3schools.com/dom/ 来了解更多的关于XML Document Object Model的数镇内容。

二、什么时候应该使用DOM工具 ◆当你需要做下列事情的时候,你应该想到XML DOM的

1、在一个或者多个XML文档之间移动元素 2、创建新的元素并且在XML文档的任意位置插入 3、 *** 作元素并重新插入其到XML文档其他位置

4、导入慧毕谈内嵌数据结构 &. pb9中,数据窗口现在可以通过XML导出内嵌数据结构(nested data

structures).

三、什么是PBDOM ◆PowerBuilder 文档结构模型(PowerBuilder Document Object Model)

1、PBDOM是通过PBNI扩展出来的,用于 *** 作XML数据,并针对PowerScript作了优化

2、在程序中模型是通过DOM的抽象来表示XML数据。(A programming model to represent XML data –an

abstraction of DOM) 3、底层是对Apache Xerces/C++的封装。

四、PBDOM的设计目标

1、简单易用(Be straightforward for PowerBuilder programmers)

2、可以利用PowerScript的强大语言能力(如对象、方法重载、数据等) 3、在可能的情况下,隐藏了XML底层前碰的复杂实现(Hide the

complexities of XML wherever possible) 4、原有的DOM在pb下使用不够直观(DOM is

unintuitive to a PowerBuilder programmer)

五、使用PBDOM初步 ◆PBDOM设置

1、添加pbdom90.pbd(%SYBASE%\Shared\PowerBuilder)到工程的pbl列表中

2、%SYBASE%\Shared\PowerBuilder应该在系统路径或者应用程序的路径中(也就是pbdom要使用此路径下的

pbdom90.dll, pbxerces90.dll、xerces_2_1_0.dll文件,同样,当程序发布时候也需要)

六、PBDOM类的使用

◆如图所示,反映了PBDOM类的组成和继承关系,可以看到,几乎所有的PBDOM类都继承自PBDOM_Object(除了PBDOM_Builder和PBDOM_Exception)

1、PBDOM_Document ◆构建PBDOM举例

1.1 直接构建(XML documents can be created from scratch) PBDOM_Document

doc PBDOM_Element rootdoc = CREATE PBDOM_Document root = CREATE

PBDOM_Element root.SetName( "root" ) root.SetText( "this is the root" )

doc.AddContent( root )

1.2 从文件、字符串、DataStore中载入 PBDOM_Builder builder doc =

builder.BuildFromString( " <foo>bar </foo>" ) doc =

builder.BuildFromFile( "c:\foo\bar.xml" doc =

builder.BuildFromDataStore( l_ds)

2、PBDOM_Element 2.1 遍历元素 PBDOM_Element root, children[], first // Get

the root element of the document root = doc.GetRootElement() // Get an

array of all child elements root.GetChildElements( children ) // Get

only elements with a given name root.GetChildElements( "name", children )

// Get the first element with a given name first =

root.GetChildElement( "name" )

注意:

上例中得到的元素数组是联动的!(The element array is live!) 即: ◆ 修改数组中的元素,同样会作用到父文档 ◆

返回的数组是有界的(Once the array is returned, it is now bounded) ◆

在数组中增加新元素时,需要一个SetContent()方法调用

2.2 移动元素 // PBDOM_Document docOne,docTwo PBDOM_Element movable

movable = CREATE PBDOM_Element Movable.SetName( "movable" )

docOne.AddContent( movable ) // add movable.Detach() // remove

docTwo.addContent( movable ) // add again

注意:

1、只要是从PBDOM_Object继承的对象,都可以调用Detach()方法(如Comments、

ProcessingInstructions、Elements (and their content)等等)

2、PBDOM元素对象不是永久的捆绑在它的父文档上的(PBDOM elements aren't permanently tied to

their parent document)

2.3 符合规格(Always well-formed) PBDOM_Element构造器以及setter方法会检查元素是否符合规格:

elem.SetName( "Spaces are illegal" )

AddContent()方法也会从以下几个方面进行检查: ◆ 结构---树中没有循环(Structure –no loops in any

tree) ◆ 只有一个根节点元素(One and only one root element) ◆ 相容的命名空间(Consistent

namespaces)

3、PBDOM_Attribute

3.1 *** 作元素属性 ◆ 元素可以有多个属性

<table width="100%" border="0"></table>

// Get an attribute ls_width = table.GetAttributeValue( "width" ) //

or ls_width = table.GetAttribute ( "width" ).GetText() // Attributes can

be typed li_border = table.GetAttribute( "width" ).GetIntValue()

// Set an attribute table.SetAttribute( "cellspacing", "0" ) //

Remove an attribute table.RemoveAttribute( "cellspacing" ) // Remove all

attributes PBDOM_Attribute empty[] table.SetAttributes( empty ) // the

PowerScript way

4、PBDOM_Text 4.1 *** 作元素文本内容 <description> cool demo </description>

// the text is directly available –returns // "~r~ncool demo~r~n" ls_desc= elem.GetText()

// two convenience methods ls_desc= elem.GetTextTrim()// returns

"cool demo" ls_desc = elem.GetTextNormalize()// returns "cool demo"

// text can be changed directly elem.SetText( "a new description" )

5、PBDOM_Object 5.1 *** 作有混合内容的元素 <description> <!–comment

--> <?convert units="metric" ?> cool demo

</description>

PBDOM_Object content[] desc.GetContent( content ) FOR i = 1 TO

UpperBound( content ) CHOOSE content[i].GetObjectClassString()

CASE "pbdom_comment" // ... CASE "pbdom_processinginstruction"

// ... END CHOOSE NEXT

6、PBDOM_ProcessingInstruction 6.1 使用处理命令(Processing instructions)

<? xml-stylesheet type="text/xsl"href="foo.xsl" ?>

{------target------} {----------------data---------------}

// Get target (e.g., "xsl-stylesheet") ls_target = pi.GetTarget()

// Get data (e.g., 'type="text/xsl"href="foo.xsl"') ls_data = pi.GetText()

// Get individual values as attributes String names[] pi.GetNames(

names ) FOR i = 1 TO UpperBound( names ) MessageBox( names[i],

pi.GetValue( names[i] ) NEXT

7、PBDOM and 命名空间(Namespaces) <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:variable name="ffsection" select="//SITE_SECTION

<xsl:template name="TopNav"> ...... </xsl:template>

</xsl:stylesheet>

String ls_element PBDOM_Element template

// get element name and namespace –return "xsl:template" template =

root.GetChildElement( "template" ) ls_element=

template.GetNamespacePrefix() +":"+ template.Getname()

// get element by name and namespace template = root.GetChildElement( "template", "xsl", "http://www.w3.org/1999/XSL/Transform")

七、PBDOM vs. the Competition ◆Apache Xerces/COM Xerces

是现在PBDOM底层使用的XML解析器,但对PowerBuiler用户来说使用不直观。(Xerces is the [current]

underlying XML parser for PBDOM, but is less intuitive)

◆MSXML .无法在UNIX等 *** 作系统上使用(No deployment to UNIX possible)

.同样对PowerBuiler用户来说使用不够直观(Less Intuitive) .COM collections vs. PB arrays

(pb用户当然会优先选择使用数组来处理数据)

◆Others Expat–a C DLL (使用时需要声明外部函数…使用不够广泛)

PowerScript可以使用代词来引用对象或控件,这样可以增加程序代码的通用性。PowerScript中的代词有:Parent、This和Super。

(1) Parent

Parent引用当前对象的父对象或包含当前对象的对象,它可用于窗口中的控件、用户对象的控件和菜单等。

(2) This

This用于引用当前对象自身的属性或事件等。它可用于窗口、用户对象、菜单、应用对象和各种控件等。

(3)Supper

子对象或控件中的程序可以调用祖先对象或控嫌穗件中的程序,可以直接使用祖先的名称调用,也可使用代词Supper来调用。亏空这里所说芹空卜的子对象与祖先对象是有继承关系的两个对象。

调用祖先对象函数的格式为:

Supper::函数名(参数)

调用祖先对象事件的格式为:

Call Supper::事件名

或:Supper::event(事件名)

(4) ParentWindow

用于菜单的时间和函数中,用于引用菜单所在的窗口的事件和属性。

    一 PowerBuilder的产生

PowerBuilder是美国著名的数据库应用开发工具生产厂商PowerSoft推出的成功产品 其第一版于 年 月正式投入市场 它是完全按照客户/服务器体系结构研制设计的 采用面者扒向对象技术 图形化的应用开发环境 是数据库的前端开发工具

二 PowerBuilder的特点

它支持应用系统同时访问多种数据库 其中既包括Oracel Sybase之类的大型数据库 又包括FOXPRO之类支持ODBC接口的小型数据库 PowerBuilder是完全可视化的数据库开发工具 它提供了大量的控件 大大加快了项目的开发速度 也使开发者更容易掌握数据库的开发

它使用的编程语言叫做PowerScripr 它也是一种高级的 结构化的编程语言 PowerScript 提供了一套完整的嵌入式SQL语句 开发人员可以像使用其它语句一样自由地使用SQL语言 这样就大大增强了程序 *** 纵和访问数据库的能力 可以说PowerBuilder既适合初学者快速学习数据库的开发 又可以让有经验的开发人员开发出功能强大的数据库 是一种适用面非常广的开发工具

PowerBuilder是一个用来进行客户/服务器开发的完全的可视化开发环境 使用PowerBuilder 你可以用一种可视的直观的方式来创建应用程序的用户界面和数据库接口 这是一个总的概念 实际上是开发人员使用PowerBuilder去开发应用程序 由于所开发的各种应用程序充分利用了图形用户接口(GUI)的优点 所以PowerBuilder被认为是一个图形工具

在客户/服务器结构的应用中 PowerBuilder具有描述多个数据库连接与检索的能力 特别是PowerBuilder能从大多数流行的RDBMS中存取数据 且不管数据存放在什么地方 另外 各种应用程序又可以独立于RDBMS 因为PowerBuilder可以使用数据库的标准 *** 作语言SQL(结构化查询语言)进行

使用PowerBuilder 可以很容易地开发出功能强大的图形界面的访问服务器数据库的应用程序 PowerBuilder提供了建立符合工业标准的应用程序(例如订单登记 会计及制造系统)所需的所有工具

PowerBuilder应用程序由窗口组成 这些窗口包含用户与之交互的控件 开发人员可以使用所有标准空间(如按钮 复选框 下拉式列表框或编辑框)以及PowerBuilder提供的特殊的使应用程序更易于开发和使用的控件

通常人们把PowerBuilder看成是一种开发工具 实际上它比其他工具强得多 是一种强有力的开发环境 开发人员不仅能用它来开发用户容易使用的各种应用程序还可以通过PowerBuilder 修改数据库 利用 多个内部定义函数 可以开发能和其他应用程序进行的各种应用程序

PowerBuilder正在成为客户/服务器应用开发的标准 相对于其他任何客户/服务器开发环境 PowerBuilder使开发人员的工作更快 成本更低 质量更高 功能更燃嫌猛强

PowerBuilder为应用开发提供了全面综合性的支持 可以分别概括为如下几点

·事件驱动的应用程序·功能强大的编程语言与函数 ·面向对象的编程  皮桥 ·跨平台开发 ·开放的数据库连结系统      

三 PowerBuilder开发环境

lishixinzhi/Article/program/PB/201311/24547


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12379260.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-23
下一篇2023-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存