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>

posted on 2006-09-07 10:33  Wisdom-zh  阅读(475)  评论(0编辑  收藏  举报

导航