Rexx - XML



XML 是一种可移植的开源语言,允许程序员开发可被其他应用程序读取的应用程序,而不管操作系统和/或开发语言如何。这是用于在应用程序之间交换数据的最常用语言之一。

什么是XML?

可扩展标记语言 XML 是一种标记语言,类似于 HTML 或 SGML。这是万维网联盟推荐的开放标准。XML 对于跟踪少量到中等数量的数据非常有用,而无需基于 SQL 的骨干。

对于我们所有的 XML 代码示例,让我们使用以下简单的 XML 文件 **movies.xml** 来构建 XML 文件并随后读取文件。

<collection shelf = "New Arrivals"> 
   <movie title = "Enemy Behind"> 
      <type>War, Thriller</type> 
      <format>DVD</format> 
      <year>2003</year> 
      <rating>PG</rating> 
      <stars>10</stars> 
      <description>Talk about a US-Japan war</description> 
   </movie> 
   
   <movie title = "Transformers"> 
      <type>Anime, Science Fiction</type> 
      <format>DVD</format> 
      <year>1989</year> 
      <rating>R</rating> 
      <stars>8</stars> 
      <description>A schientific fiction</description> 
   </movie> 
   
   <movie title = "Trigun"> 
      <type>Anime, Action</type> 
      <format>DVD</format> 
      <year>1986</year> 
      <rating>PG</rating> 
      <stars>10</stars> 
      <description>Vash the Stam pede!</description> 
   </movie> 
   
   <movie title = "Ishtar"> 
      <type>Comedy</type> 
      <format>VHS</format> 
      <year>1987</year> 
      <rating>PG</rating> 
      <stars>2</stars> 
      <description>Viewable boredom </description> 
   </movie> 
</collection>

入门

默认情况下,Rexx 解释器中不包含 xml 功能。为了在 Rexx 中使用 XML,需要执行以下步骤。

加载 XML 函数

一旦下载并成功注册了上一节中的所有文件,下一步就是编写代码来加载 Rexx XML 函数。这是用以下代码完成的。

rcc = rxfuncadd('XMLLoadFuncs', 'rexxxml', 'xmlloadfuncs') 

if rcc then do 
   say rxfuncerrmsg() 
   exit 1 
end 
call xmlloadfuncs

关于上述程序,可以注意到以下几点:

  • 函数 **rxfuncadd** 用于加载外部库。**xmlloadfuncs** 函数用于将 **rexxxml** 文件中的所有库加载到内存中。

  • 如果 rcc<>0,则会导致错误。为此,我们可以调用 **rxfuncerrmsg** 来获得有关错误消息的更多详细信息。

  • 我们最终调用 **xmlloadfuncs**,以便现在可以在 Rexx 程序中启用所有与 xml 相关的功能。

让我们看看 **Rexx 中可用的各种 XML 方法**。

xmlVersion

此方法返回系统上使用的 XML 和 XSLT 库的版本。

语法

xmlVersion()

参数

返回值

此方法返回系统上使用的 XML 和 XSLT 库的版本。

示例

rcc = rxfuncadd('XMLLoadFuncs', 'rexxxml', 'xmlloadfuncs') 

if rcc then do 
   say rxfuncerrmsg() 
   exit 1 
end 
call xmlloadfuncs 
say xmlVersion() 

运行上述程序时,我们将得到以下结果。这再次取决于系统上使用的 XML 库的版本。

输出

1.0.0 20631 10126 

xmlParseXML

此函数用于解析发送到函数的 XML 数据。文档树由函数返回。

语法

xmlParseXML(filename) 

参数

  • **文件名** - 这是需要解析的 XML 文件的名称。

返回值

文档树由函数返回。否则返回 0,如果出现错误。

示例

rcc = rxfuncadd('XMLLoadFuncs', 'rexxxml', 'xmlloadfuncs') 

if rcc then do 
   say rxfuncerrmsg() 
   exit 1 
end 
call xmlloadfuncs 

say xmlVersion() 
sw = xmlParseXML('test.xml') 

输出

无一般输出。

xmlFindNode

此方法评估传递给它的 **XPath 表达式**。这用于解析文档树以产生可以进一步处理的 **节点集**。

语法

xmlParseXML(XPath,document) 

参数

  • **XPath** - 这是 xml 文件中节点的路径。

  • **文档** - 这是 XML 文档

返回值

评估 XPath 表达式并将结果作为稍后可用的节点集返回。

示例

rcc = rxfuncadd('XMLLoadFuncs', 'rexxxml', 'xmlloadfuncs') 

if rcc then do 
   say rxfuncerrmsg() 
   exit 1 
end 
call xmlloadfuncs

say xmlVersion() 
document = xmlParseXML('test.xml') 
nodeset = xmlFindNode('//movie', document) 
say xmlNodesetCount(nodeset)

运行上述程序时,我们将得到以下结果。

输出

4

输出显示了我们 xml 列表中的电影节点数

xmlEvalExpression

以下方法用于评估 XPath 表达式并返回字符串作为结果。

语法

xmlParseXML(XPath,Node) 

参数

  • **XPath** - 这是 xml 文件中节点的路径。

  • **文档** - 特定的节点元素。

返回值

根据发送给它的 XPath 表达式返回一个字符串。

示例

rcc = rxfuncadd('XMLLoadFuncs', 'rexxxml', 'xmlloadfuncs') 

if rcc then do 
   say rxfuncerrmsg() 
   exit 1 
end 
call xmlloadfuncs 

document = xmlParseXML('test.xml') 
nodeset = xmlFindNode('//movie', document) 
do j = 1 to xmlNodesetCount(nodeset) 
value = xmlEvalExpression('type', xmlNodesetItem(nodeset, j)) 
say value 
end

运行上述程序时,我们将得到以下结果。

输出

War, Thriller 
Anime, Science Fiction 
Anime, Action 
Comedy 
广告