Reputation: 35
Hi friends I have below code in XML file. I need to find the value of <x> <metadata> <field><name>work</name><value>
based on y
tag value.
<x>
<y>12</y>
<metadata>
<field>
<name>1234</name>
<value>qqqqqq</value>
</field>
<field>
<name>work</name>
<value>true</value>
</field>
</metadata>
</X>
<x>
<y>14</y>
<metadata>
<field>
<name>5678</name>
<value>wwwww</value>
</field>
<field>
<name>work</name>
<value>false</value>
</field>
</metadata>
</X>
y=14;
$.ajax({
type: "GET" ,
url: "../JRF/JRF.xml" ,
dataType: "xml" ,
success: function(xml) {
$(xml).find('x').each(function(){
if(y == $(this).find('y').text())
{
?????????
}
});
}
});
Can u help me to get the value of <value>
true
or false
and I have to store the value in a hidden input text box.
Upvotes: 1
Views: 3305
Reputation: 135752
Here's something you can use:
$(xml).find('x').each(function() {
if (y == $(this).find('y').text()) {
var trueOrFalse = $(this).find('metadata field:has(name:contains("work")) value').text();
console.log('work for ' + y + ' is ' + trueOrFalse);
}
});
Basically, it:
$(xml).find('x').each(function() {
x
element in the XMLif (y == $(this).find('y').text()) {
x
has an y
child element whose text contents is equal to y
$(this).find('metadata field:has(name:contains("work")) value').text();
$(this).find('metadata field')
field
element that is child of a metadata
element$(this).find('metadata field:has(name:contains("work"))')
field
that have a name
child with "work"
in its contents$(this).find('metadata field:has(name:contains("work")) value').text();
value
element of the field:has(name:contains("work"))
, and gets its text.Demo below.
var xml = `<root>
<x>
<y>12</y>
<metadata>
<field>
<name>1234</name>
<value>qqqqqq</value>
</field>
<field>
<name>work</name>
<value>true</value>
</field>
</metadata>
</x>
<x>
<y>14</y>
<metadata>
<field>
<name>5678</name>
<value>wwwww</value>
</field>
<field>
<name>work</name>
<value>false</value>
</field>
</metadata>
</x>
</root>
`;
var y = 14;
$(xml).find('x').each(function() {
if (y == $(this).find('y').text()) {
var trueOrFalse = $(this).find('metadata field:has(name:contains("work")) value').text();
console.log('work for ' + y + ' is ' + trueOrFalse);
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
And, if you are into one-liners:
$(xml).find('x:has(y:contains("'+ y +'")) metadata field:has(name:contains("work")) value').text();
Demo:
var xml = `<root>
<x>
<y>12</y>
<metadata>
<field>
<name>1234</name>
<value>qqqqqq</value>
</field>
<field>
<name>work</name>
<value>true</value>
</field>
</metadata>
</x>
<x>
<y>14</y>
<metadata>
<field>
<name>5678</name>
<value>wwwww</value>
</field>
<field>
<name>work</name>
<value>false</value>
</field>
</metadata>
</x>
</root>
`;
var y = 14;
var trueOrFalse = $(xml).find('x:has(y:contains("'+ y +'")) metadata field:has(name:contains("work")) value').text();
console.log('work for ' + y + ' is ' + trueOrFalse);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Upvotes: 3