📅  最后修改于: 2020-11-02 04:02:59             🧑  作者: Mango
XML是一种可移植的开放源代码语言,它使程序员能够开发可由其他应用程序读取的应用程序,而与操作系统和/或开发语言无关。这是用于在应用程序之间交换数据的最常见的语言之一。
可扩展标记语言XML是一种类似于HTML或SGML的标记语言。万维网联盟建议这样做,并且可以作为开放标准使用。 XML对于跟踪少量到中等数量的数据而无需基于SQL的主干非常有用。
对于我们所有的XML代码示例,让我们使用以下简单的XML文件movie.xml来构造XML文件并随后读取该文件。
War, Thriller
DVD
2003
PG
10
Talk about a US-Japan war
Anime, Science Fiction
DVD
1989
R
8
A schientific fiction
Anime, Action
DVD
1986
PG
10
Vash the Stam pede!
Comedy
VHS
1987
PG
2
Viewable boredom
默认情况下,Rexx解释器不包含xml功能。为了在Rexx中使用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的各种方法。
此方法返回系统上使用的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
该函数用于解析发送给该函数的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')
没有一般输出。
此方法评估传递给它的XPath表达式。这用于解析文档树以生成可以进一步处理的节点集。
xmlParseXML(XPath,document)
XPath-这是xml文件中节点的路径。
document-此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列表中的电影节点数
下面的方法用于评估XPath表达式并返回一个字符串作为结果。
xmlParseXML(XPath,Node)
XPath-这是xml文件中节点的路径。
document-特定节点元素。
根据发送给它的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