in reply to Need help with node names for creating header line

Try

#!/usr/bin/perl use strict; use warnings; use XML::Twig; my $header='u_ci_id,u_display_name,name,fqdn,ip_address,mac_address'; my $field = $ARGV[0] || 'u_ci_id'; my $input_xml = do { local $/; <DATA> }; my $twig = new XML::Twig; $twig->xparse($input_xml); my $root = $twig->root(); my @data = (); my @cols = split ',',$header; unshift @cols, $field; # added for sort for my $record ($root->children) { push @data,[ map { $record->first_child($_)->text } @cols]; } my @sorted = sort { $b->[0] cmp $a->[0] } @data; print $header."\n"; for (@sorted){ print join ',',@$_[1..$#cols]; # exclude sort col print "\n"; } __DATA__ <?xml version="1.0" encoding="UTF-8"?> <response> <result> <fqdn>fqdnB</fqdn> <ip_address>ip1</ip_address> <u_display_name>display1</u_display_name> <name>name1</name> <mac_address>mac5</mac_address> <u_ci_id>id 1</u_ci_id> </result> <result> <fqdn>fqdnA</fqdn> <ip_address>ip2</ip_address> <u_display_name>display2</u_display_name> <name>name2</name> <mac_address>mac4</mac_address> <u_ci_id>id 2</u_ci_id> </result> </response>
poj

Replies are listed 'Best First'.
Re^2: Need help with node names for creating header line
by vlturner (Sexton) on Dec 30, 2015 at 18:21 UTC
    I need this:
    my $input_xml = $client->responseContent(); instead of my $input_xml = do { local $/; <DATA> }; which breaks at push @data,[ map { $record->first_child($_)->text } @cols]; Because of the $_

      Without $_

      for my $record ($root->children) { my @tmp=(); for my $col (@cols){ push @tmp,$record->first_child($col)->text; } push @data,[ @tmp ]; }
      poj

        Are some tags missing ?. If so you will need to decide how to deal with them.

        for my $record ($root->children) { my @tmp=(); for my $col (@cols){ if (defined $record->first_child($col)){ push @tmp,$record->first_child($col)->text; } else { push @tmp,'';; } } push @data,[ @tmp ]; }
        poj
        Still getting this error perl CMDB_Sample.pl Can't call method "text" on an undefined value at CMDB_Sample.pl line 62.
        OK, took out extraneous lines. Still getting following error: perl CMDB_Sample.pl Can't call method "text" on an undefined value at CMDB_Sample.pl line 46.
        #!/usr/bin/perl use strict; use warnings; use 5.014; use MIME::Base64; use Data::Dumper; use XML::Twig; use REST::Client; # Just in case we want to request JSON instead of XML from CMDB #use JSON; Just in case we want to request JSON instead of XML from CM +DB # Set the request parameters my $host = 'https://staplessb.service-now.com'; # Eg. User name="admin", Password="admin" for this code sample. my $user = 'USERNAME'; my $pwd = 'PASSWORD'; my $client = REST::Client->new(host => $host); my $encoded_auth = encode_base64("$user:$pwd", ''); my $header = 'checked_in,change_request,po_number,correlation_id,cfg_a +uto_provider,supported_by,u_service_catalogtrue,first_discovered,u_oe +m_part_numbe,sent_for_repair,owned_by,gl_account,managed_by,asset,u_p +roject_id,maintenance_schedule,u_chgfalse,category,delivery_date,inst +all_status,u_maintenance_window,virtualfalse,u_sub_class,dns_domain,u +_incident,u_parts_software_needed,change_control,checked_out,u_decomm +ission_stamp,purchase_date,order_date,u_template,skip_sync,lease_id,u +_sevice_options,vendor,sys_id,u_maint_contract_sla,sys_created_by,u_s +la_support_tie,subcategory,start_date,comments,location,link,value,un +verified,justification,u_disposal_date,sys_tags,sys_domain,link,value +,sys_mod_count,cost_cc,u_total_purchase_cost,monitor,sys_updated_on,w +arranty_expiration,invoice_number,fqdn,cost,u_retail_grp,u_server_typ +e,ip_address,u_manufacture_date_dummy,last_discovered,model_id,link,v +alue,manufacturer,u_incfalse,company,due,cfg_auto_management_server,u +_proposed,u_change,u_work_notes,u_store_location,asset_tag,discovery_ +source,u_application_id,assignment_group,can_print,u_problem,departme +nt,u_manufacture_date,support_group,link,value,u_exclusion,sys_create +d_on,u_display_name,u_alias,cost_center,short_description,sys_updated +_by,name,u_environment,u_function,due_in,u_change_approver,install_da +te,assigned,u_active_stamp,u_retail_group,serial_number,u_work_notes_ +_asset_,repair_contract_id,assigned_to,mac_address,model_number,sched +ule,u_ci_id,returned_from_repair,ng_assignment_flag,u_procurement_pro +duct_number,sys_class_name,attributes,u_location_stamp,fault_count,cf +g_auto_change'; $client->GET("/api/now/table/cmdb_ci?sysparm_limit=5&sysparm_fields=($ +header)", {'Authorization' => "Basic $encoded_auth", 'Accept' => 'application/xml'}); my $field= $ARGV[0] || 'u_ci_id'; my $input_xml = $client->responseContent(); my $twig = new XML::Twig; $twig->xparse($input_xml); my $root = $twig->root(); my @data = (); my @cols = split ',',$header; unshift @cols, $field; # added for sort for my $record ($root->children) { my @tmp=(); for my $col (@cols){ push @tmp,$record->first_child($col)->text; } push @data,[ @tmp ]; } my @sorted = sort { $b->[0] cmp $a->[0] } @data; print $header."\n"; for (@sorted){ print join ',',@$_[1..$#cols]; # exclude sort col print "\n"; } __DATA__ <?xml version="1.0" encoding="UTF-8"?> <response> <result> <checked_in></checked_in> <change_request></change_request> <po_number></po_number> <correlation_id></correlation_id> <cfg_auto_provider></cfg_auto_provider> <supported_by></supported_by> <u_service_catalog>true</u_service_catalog> <first_discovered></first_discovered> <u_oem_part_numbe></u_oem_part_numbe> <sent_for_repair></sent_for_repair> <owned_by></owned_by> <gl_account></gl_account> <managed_by></managed_by> <asset></asset> <u_project_id></u_project_id> <maintenance_schedule></maintenance_schedule> <u_chg>false</u_chg> <category></category> <delivery_date></delivery_date> <install_status></install_status> <u_maintenance_window></u_maintenance_window> <virtual>false</virtual> <u_sub_class></u_sub_class> <dns_domain></dns_domain> <u_incident></u_incident> <u_parts_software_needed></u_parts_software_needed> <change_control></change_control> <checked_out></checked_out> <u_decommission_stamp></u_decommission_stamp> <purchase_date></purchase_date> <order_date></order_date> <u_template></u_template> <skip_sync></skip_sync> <lease_id></lease_id> <u_sevice_options></u_sevice_options> <vendor></vendor> <sys_id></sys_id> <u_maint_contract_sla></u_maint_contract_sla> <sys_created_by></sys_created_by> <u_sla_support_tie></u_sla_support_tie> <subcategory></subcategory> <start_date></start_date> <comments></comments> <location> <link></link> <value></value> </location> <unverified></unverified> <justification></justification> <u_disposal_date></u_disposal_date> <sys_tags></sys_tags> <sys_domain> <link></link> <value></value> </sys_domain> <sys_mod_count></sys_mod_count> <cost_cc></cost_cc> <u_total_purchase_cost></u_total_purchase_cost> <monitor></monitor> <sys_updated_on></sys_updated_on> <warranty_expiration></warranty_expiration> <invoice_number></invoice_number> <fqdn></fqdn> <cost></cost> <u_retail_grp></u_retail_grp> <u_server_type></u_server_type> <ip_address></ip_address> <u_manufacture_date_dummy></u_manufacture_date_dummy> <last_discovered></last_discovered> <model_id> <link></link> <value></value> </model_id> <manufacturer></manufacturer> <u_inc>false</u_inc> <company></company> <due></due> <cfg_auto_management_server></cfg_auto_management_server> <u_proposed></u_proposed> <u_change></u_change> <u_work_notes></u_work_notes> <u_store_location></u_store_location> <asset_tag></asset_tag> <discovery_source></discovery_source> <u_application_id></u_application_id> <assignment_group></assignment_group> <can_print></can_print> <u_problem></u_problem> <department></department> <u_manufacture_date></u_manufacture_date> <support_group> <link></link> <value></value> </support_group> <u_exclusion></u_exclusion> <sys_created_on></sys_created_on> <u_display_name></u_display_name> <u_alias></u_alias> <cost_center></cost_center> <short_description></short_description> <sys_updated_by></sys_updated_by> <name></name> <u_environment></u_environment> <u_function></u_function> <due_in></due_in> <u_change_approver></u_change_approver> <install_date></install_date> <assigned></assigned> <u_active_stamp></u_active_stamp> <u_retail_group></u_retail_group> <serial_number></serial_number> <u_work_notes__asset_></u_work_notes__asset_> <repair_contract_id></repair_contract_id> <assigned_to></assigned_to> <mac_address></mac_address> <model_number></model_number> <schedule></schedule> <u_ci_id></u_ci_id> <returned_from_repair></returned_from_repair> <ng_assignment_flag></ng_assignment_flag> <u_procurement_product_number></u_procurement_product_number> <sys_class_name></sys_class_name> <attributes></attributes> <u_location_stamp></u_location_stamp> <fault_count></fault_count> <cfg_auto_change></cfg_auto_change> </result> </response>';