lr_xml_find()
验证查询返回的XML值。
int lr_xml_find(<规范列表> [,<可选规范列表]],[LAST]);
参数说明:
List of specifications:对于以下所需规格的列表,请使用以下字符串格式:
“Specification = value”
Query:对输入字符串XML的XML查询或快速查询。
XML:要查询的XML输入字符串
选择以下选项之一:
Value:要查找的字符串。这可以是元素值或其属性值。
or:
ValueParam:包含要查找的字符串的参数名称。
List of optional specifications:对于以下可选规格列表,请使用以下字符串格式:
“Specification = value”
SelectAll:如果为“yes”,则将处理与查询匹配的所有元素。如果“否”,则仅验证第一个查询匹配。默认值为“no”。请参阅多查询匹配
IgnoreCase:如果为“yes”,则搜索将忽略Value或ValueParam的大写和小写字符与查询结果之间的差异。默认值为“no”。
UseRegExp:如果为“yes”,Value和ValueParam可以是函数将搜索的正则表达式。有关详细信息,请参阅正则表达式。默认值为“UseRegExp = no”。
NotFound:指定在找不到搜索值时脚本是失败还是继续。值为“继续”或“错误”。如果未指定NotFound,则脚本将失败。
LAST:表示可选规范列表结束的标记
lr_xml_find函数查询XML输入字符串XML中与查询条件(Value或ValueParam)匹配的值,并返回出现次数。如果SelectAll为“no”,lr_xml_find返回1或0。
示例:lr_xml_find
以下示例将“扩展”标记插入到员工记录中。它首先使用lr_xml_find验证雇员John Smith的记录是否存在于XML字符串xml_input中。如果它不存在,那么lr_xml_find将终止脚本的执行并发送错误消息。
但是,如果在运行时设置中选择继续运行错误或“NotFound = continue”传递到lr_xml_find,脚本将继续。在这些情况下,检查匹配数将阻止lr_xml_insert执行。有关处理错误条件的更多选项,请参阅lr_exit。
如果find操作成功,lr_xml_insert在xml_input中搜索标签“<employee>”,并插入包含扩展信息的XML片段。 (“XmlFragment = <extension> 2145 </ extension>”)。
结果字符串包含在ResultParam参数Result中。
有关使用lr_xml_find的更多示例,请参见“查找第一个出现”,“尝试查找部分字符串”,“使用正则表达式查找部分字符串”,“查找不是第一个出现的完整字符串”以及在“XML查询的示例脚本”的“XML字符串”部分中的“验证值是否存在”中的“指定发生”。
#include“as_web.h”
char * xml_input =
“<acme_org>”
“<employee level = \”manager \“> John Smith”
“<cubicle> 227 </ cubicle>”
“</ employee>”
“</ acme_org>”;
Action(){
int find_cnt;
lr_save_string(xml_input,“XML_Input_Param”);
/ *验证员工John Smith是否存在* /
find_cnt = lr_xml_find(“XML = {XML_Input_Param}”,
“Value = John Smith”,
“Query = / acme_org / employee”,
LAST);
if(find_cnt> 0)
{
/ *现在插入John Smith的电话分机号码* /
lr_xml_insert(“XML = {XML_Input_Param}”,“ResultParam = Result”,
“XmlFragment = <extension> 2145 </ extension>”,
“Query = / acme_org / employee”,
“Position = child”,LAST);
lr_output_message(lr_eval_string(“Insert after String:{Result}”)));
} // end if find_cnt> 0
return 0;
}}
输出:
Action.c(15):“lr_xml_find”成功,处理1个匹配
Action.c(20):“lr_xml_insert”成功,处理1个匹配
Action.c(25):插入后的字符串:<acme_org> <employee> John Smith <cubicle> 227 </ cubicle> <extension> 2145 </ extension> </ employee> </ acme_org>
实施例2
以下示例按级别属性的值搜索。在第一个实例中,找到文本管理器。在第二个例子中,没有找到导演的匹配。
lr_xml_find(“Xml = {XML_Input_Param}”,
“Query = / acme_org / employee / @ level”,
“Value = manager”,
LAST
);
lr_xml_find(“Xml = {XML_Input_Param}”,
“Query = / acme_org / employee / @ level”,
“Value = director”,
LAST
);
输出(在执行日志或output.txt文件中):
Action.c(14):“lr_xml_find”成功,处理1个匹配
Action.c(19):错误:找不到指定的查询的匹配[class:CLrXmlScriptFunc]
Action.c(19):错误:“lr_xml_find”执行失败