0

I have XML with same tags but I need to select parent tag by its child value. For example in below XML, I have three memberDocs tag but I have to select only tag which have child tag with documentType ==> Passport

<memberCard>
    <awardMiles>1967500</awardMiles>
    <nextCard>SLV</nextCard>
    <qualifyingMiles>30000</qualifyingMiles>
    <qualifyingSectors>0</qualifyingSectors>
    <tier>BLU</tier>
    <totalAwardMilesSinceEnrollment>2195000</totalAwardMilesSinceEnrollment>
    <totalQualifyingMilesSinceEnrollment>30000</totalQualifyingMilesSinceEnrollment>
    <validFrom>2017-04-10T00:00:00+03:00</validFrom>
    <validUntil>2018-04-10T00:00:00+03:00</validUntil>
</memberCard>
<memberDocs>
    <documentId>46374746</documentId>
    <documentType>Passport</documentType>
    <issuingCountry>DZ</issuingCountry>
    <seqNo>1093094</seqNo>
    <validFrom>2015-03-01T08:00:00+02:00</validFrom>
    <validUntil>2018-03-01T01:00:00+02:00</validUntil>
</memberDocs>
<memberDocs>
    <documentId>123456789012</documentId>
    <documentType>National_ID</documentType>
    <issuingCountry>KW</issuingCountry>
    <seqNo>1247244</seqNo>
    <validFrom>2016-04-01T03:00:00+03:00</validFrom>
    <validUntil>2020-04-01T12:00:00+03:00</validUntil>
</memberDocs>
<memberDocs>
    <documentId>6534232</documentId>
    <documentType>Driver’s_license</documentType>
    <issuingCountry>AL</issuingCountry>
    <seqNo>1247245</seqNo>
    <validFrom>2017-04-01T00:00:00+03:00</validFrom>
    <validUntil>2017-04-30T00:00:00+03:00</validUntil>
</memberDocs>
<memberType>IN</memberType>
<name>Charles</name>
<nameOnCard>PROF CHARLES DARWIN</nameOnCard>
<nationality>LU</nationality>
Milind
  • 1,855
  • 5
  • 30
  • 71
  • Possible duplicate of [XPath find all elements with specific child node](http://stackoverflow.com/questions/10881179/xpath-find-all-elements-with-specific-child-node) – Barett Apr 28 '17 at 19:16

1 Answers1

1

You can use XML as DOM element, and later just apply any DOM manipulation functions you want:

var xml = "<memberCard>\
    <awardMiles>1967500</awardMiles>\
    <nextCard>SLV</nextCard>\
    <qualifyingMiles>30000</qualifyingMiles>\
    <qualifyingSectors>0</qualifyingSectors>\
    <tier>BLU</tier>\
    <totalAwardMilesSinceEnrollment>2195000</totalAwardMilesSinceEnrollment>\
    <totalQualifyingMilesSinceEnrollment>30000</totalQualifyingMilesSinceEnrollment>\
    <validFrom>2017-04-10T00:00:00+03:00</validFrom>\
    <validUntil>2018-04-10T00:00:00+03:00</validUntil>\
</memberCard>\
<memberDocs>\
    <documentId>46374746</documentId>\
    <documentType>Passport</documentType>\
    <issuingCountry>DZ</issuingCountry>\
    <seqNo>1093094</seqNo>\
    <validFrom>2015-03-01T08:00:00+02:00</validFrom>\
    <validUntil>2018-03-01T01:00:00+02:00</validUntil>\
</memberDocs>\
<memberDocs>\
    <documentId>123456789012</documentId>\
    <documentType>National_ID</documentType>\
    <issuingCountry>KW</issuingCountry>\
    <seqNo>1247244</seqNo>\
    <validFrom>2016-04-01T03:00:00+03:00</validFrom>\
    <validUntil>2020-04-01T12:00:00+03:00</validUntil>\
</memberDocs>\
<memberDocs>\
    <documentId>6534232</documentId>\
    <documentType>Driver’s_license</documentType>\
    <issuingCountry>AL</issuingCountry>\
    <seqNo>1247245</seqNo>\
    <validFrom>2017-04-01T00:00:00+03:00</validFrom>\
    <validUntil>2017-04-30T00:00:00+03:00</validUntil>\
</memberDocs>\
<memberType>IN</memberType>\
<name>Charles</name>\
<nameOnCard>PROF CHARLES DARWIN</nameOnCard>\
<nationality>LU</nationality>";

var xmlWrapper = $('<div>').html($(xml));
var passports = xmlWrapper.find('memberDocs').filter(function () {
  var docType = $(this).find('documentType');
  
  return docType.length && docType.text() == 'Passport';
});

alert(passports.eq(0).find('documentId').text());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Justinas
  • 41,402
  • 5
  • 66
  • 96