1

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.

XML File

<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>

My code

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.

1 Answer 1

3

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() {
    • gets every x element in the XML
  • if (y == $(this).find('y').text()) {
    • if that x has an y child element whose text contents is equal to y
  • $(this).find('metadata field:has(name:contains("work")) value').text();
    • Breakdown:
      • $(this).find('metadata field')
        • it finds the field element that is child of a metadata element
      • $(this).find('metadata field:has(name:contains("work"))')
        • it limits only to those field that have a name child with "work" in its contents
      • $(this).find('metadata field:has(name:contains("work")) value').text();
        • and this selects the 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>

Sign up to request clarification or add additional context in comments.

2 Comments

DId you try it out?
it is very useful for me thanks a lot. U explained me very detailed thank u so much. I need to break the loop once the value is found. can u help me

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.