Jack Php
Jack Php

Reputation: 577

Get parent element node when child node is matched

This is my code:

<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script>
var xml;
$.get(
    "code.xml",  
    function(data) { xml=data; },
    "html"
);
function get_list(){
  xmlDoc = $.parseXML( xml ),
  $xml = $( xmlDoc ),
  $title = $xml.find('[value="'+$('#select').val()+'"]');
  $nodes = $title.find('*');
  var result='';
  $nodes.each(function(){
    result += $(this).attr('value');
    result += ' ';
  });
  $("#result").html(result);
}
</script>
</head>
<input type="text" id="select">
<input type="button" name="button" value="Search" onclick="get_list()" >
<div id="result">
</div>
</html>

This is my xml file:

 <root>
    <child_1 entity_id = "1" value="india">
        <child_2 entity_id = "2" value="gujarat">
            <child_3 entity_id = "3" value="Ahemdabad"/>
            <child_4 entity_id = "4" value="Surat"/>
            <child_5 entity_id = "5" value="Rajkot"/>           
        </child_2>
    </child_1>
    <child_6 entity_id = "6" value="Rasia">
        <child_7 entity_id = "7" value="state">
            <child_8 entity_id = "8" value="cty"/>
            <child_9 entity_id = "9" value="cty1"/>
            <child_10 entity_id = "10" value="cty2"/>           
        </child_2>
    </child_6>
</root>

With this code I get the child node value.

I wanted something, like when i enter in textbox any of city name: Ahemdabad, Surat, Rajkot; then its match on my xml file returns me country name like India.

Thanks!

Upvotes: 0

Views: 333

Answers (2)

Nora
Nora

Reputation: 1482

You can use this xpath

//*[@value='Ahemdabad']/parent::*/@value

Just replace 'Ahemdabad' with the desired city name

Upvotes: 0

Arun P Johny
Arun P Johny

Reputation: 388436

Try

var xml;
$.get(
    "code.xml",  
    function(data) { 
        xml=data; 
    },
    "html"
);
function get_list(){
    var xmlDoc = $.parseXML( xml ),
        $xml = $( xmlDoc ),
            $title = $xml.find('[value="'+$('#select').val()+'"]');
    var ctrs = $xml.find('root').children();
    $("#result").html($title.closest(ctrs).attr('value'));
}

Demo: Plunker

Upvotes: 2

Related Questions