XML output with WinRunner – 2
Root page: Service Functions – XML
Parent page: Service Functions – XML / WinRunner
Create XML Node
public function xml_node_create(inout dtNode[], in tag, in text) {
delete dtNode[];
dtNode["tag"] = tag;
dtNode["text"] = xml_str_norm(text);
}
Add Attributes to XML Node
public function xml_node_attr_add(inout dtNode[], in attr_tag1, in attr_value1, in attr_tag2, in attr_value2, in attr_tag3, in attr_value3, in attr_tag4, in attr_value4, in attr_tag5, in attr_value5) {
if ((nargs()-1)<=0) return;
if (attr_tag1 != "") {
dtNode[1,"attr_tag"] = attr_tag1;
dtNode[1,"attr_value"] = xml_str_norm(attr_value1);
dtNode[0,"attr_count"] = 1;
}
else
return;
if (attr_tag2 != "") {
dtNode[2,"attr_tag"] = attr_tag2;
dtNode[2,"attr_value"] = xml_str_norm(attr_value2);
dtNode[0,"attr_count"] = 2;
}
else
return;
if (attr_tag3 != "") {
dtNode[3,"attr_tag"] = attr_tag3;
dtNode[3,"attr_value"] = xml_str_norm(attr_value3);
dtNode[0,"attr_count"] = 3;
}
else
return;
if (attr_tag4 != "") {
dtNode[4,"attr_tag"] = attr_tag4;
dtNode[4,"attr_value"] = xml_str_norm(attr_value4);
dtNode[0,"attr_count"] = 4;
}
else
return;
if (attr_tag5 != "") {
dtNode[5,"attr_tag"] = attr_tag5;
dtNode[5,"attr_value"] = xml_str_norm(attr_value5);
dtNode[0,"attr_count"] = 5;
}
else
return;
}
Append XML Node to file
public function xml_node_open(in xml_file, inout dtNode[]) {
auto rc;
auto s_line;
if (xml_write_mode) {
rc = file_open(xml_file, FO_MODE_APPEND);
if (rc != E_OK) return(rc);
file_printf(xml_file, "%s\r\n", "");
s_line = node_indent & xml_str_node_tag(dtNode);
file_printf(xml_file, "%s\r\n", s_line);
if (dtNode["text"] != "")
file_printf(xml_file, "%s\r\n", node_indent & " " & dtNode["text"]);
file_printf(xml_file, "%s\r\n", "");
file_close(xml_file);
}
else {
dump_printf("%s\r\n", "");
s_line = node_indent & xml_str_node_tag(dtNode);
dump_printf("%s\r\n", s_line);
if (dtNode["text"] != "")
dump_printf("%s\r\n", node_indent & " " & dtNode["text"]);
dump_printf("%s\r\n", "");
}
### Indent!!!
node_indent = node_indent & "\t";
return(E_OK);
}
static function xml_str_node_tag(inout dtNode[]) {
auto res, i,c;
res = "<" & dtNode["tag"];
c = dtNode[0,"attr_count"];
if (c=="") c=0;
for (i=1;i<=c;i++)
res = res & " " & dtNode[i,"attr_tag"] & "=" & "\""& dtNode[i,"attr_value"] & "\"";
res = res & ">";
return(res);
}
Finalize XML Node to file
public function xml_node_close(in xml_file, inout dtNode[]) {
auto rc;
auto s_line;
### Indent!!!
node_indent = substr(node_indent,2);
if (xml_write_mode) {
rc = file_open(xml_file, FO_MODE_APPEND);
if (rc != E_OK) return(rc);
file_printf(xml_file, "%s\r\n", "");
s_line = node_indent & "</" & dtNode["tag"] & ">";
file_printf(xml_file, "%s\r\n", s_line);
file_printf(xml_file, "%s\r\n", "");
file_close(xml_file);
}
else {
dump_printf("%s\r\n", "");
s_line = node_indent & "</" & dtNode["tag"] & ">";
dump_printf("%s\r\n", s_line);
dump_printf("%s\r\n", "");
}
return(E_OK);
}

