Nuva 示例代码之初识 XML
← 目录
作者: 一了 <
[email protected]
> 日期: 2006-09-07 一句话总结: 本例的程序生成一个三层结构的简单 XML 文档,目的在于展示 Nuva 语言操作 XML 文档的能力。
# Nuva 示例代码之初识 XML ``` <..======================================================== == == == Macrobject Nuva Samples == == == == Copyright (c) 2004-2006 Macrobject Software == == == == ALL RIGHTS RESERVED == == == == http://www.macrobject.com == == == ========================================================..> <. var xml = System.Xml.Document('ObjectSpace') xml.Root.Props.Name = 'Schema1' foreach(tname = ['Table1', 'Table2']) var tObjSet = FindOrCreateObjectSet(xml.Root, tname) foreach(tvalue = ['A', 'B']) var tObj = tObjSet.Nodes.Add('Object') tObj.Props.Field1 = tname ~ '_' ~ tvalue end foreach function FindOrCreateObjectSet(theParent, theName) Result = theParent.FindByProp('Name', theName) if (Result = nil) Result = theParent.Nodes.Add('ObjectSet') Result.Props.Name = theName end if end function end foreach ? xml.ToString .> ``` ``` <.. 【简介】 本例是一个简单的生成 XML 文档的程序。 本例的程序生成一个三层结构的简单 XML 文档,目的在于展示 Nuva 语言操作 XML 文档的能力。 【看点】 1、本例演示了 Nuva 语言在 XML 的应用 Nuva 语言提供了一个 XML 库,其中包括 XmlDocument、XmlNode、XmlNodeList 类: XmlDocument 对象通过 System.XML.Document([名称]) 创建,其中可以包含一个名称参数,如果该名称是一个文件,则从文件读取,否则返回的 XmlDocument 的 Root 节点即可以此名称来命名。 XmlDocument 有一些属性和方法,具体可以参见<<Nuva API>>,本例用到了一下的属性和方法: XmlDocument.Root:返回根节点(XmlNode 对象) XmlDocument.ToString:返回 Xml 的字符串 XmlNode 有以下属性和方法在本例中使用: XmlNode.Props:返回一个属性集,后面可以直接加上 .<PropName>,可以为此属性取值赋值 XmlNode.Nodes:返回一个节点集(XmlNodeList 对象) XmlNode.FindByProp(theName, theValue, [inSub]):返回一个子节点,最后一个可选参数规定是否深层次递归查找所有子节点 本例用到了 XmlNodeList 的一个方法: XmNodeList.Add(theName, [theValue]):返回一个新子节点,最后一个可选参数指定其 Value 2、本例作为示例,也定义了一些集合,用于 foreach 循环 3、本例中对于 ObjectSet 节点的创建调用了一个函数 FindOrCreateObjectSet,目的是对于相同的表名必须只能创建一次。有兴趣者可以在第一个循环的集合加入相同的表名,看看运行的结果。 【扩展】 本例可以进一步扩展以增强其实用性,比如创建真正实用的 Xml 文档用于实际编程中。 ..> ``` 本例运行结果如下: ``` <?xml version="1.0"?> <ObjectSpace Name="Schema1"> <ObjectSet Name="Table1"> <Object Field1="Table1_A"/> <Object Field1="Table1_B"/> </ObjectSet> <ObjectSet Name="Table2"> <Object Field1="Table2_A"/> <Object Field1="Table2_B"/> </ObjectSet> </ObjectSpace> ```