jquery xml查找值为

时间:2018-03-30 23:24:16

标签: jquery ajax xml xml-parsing

朋友们,我在XML文件中有以下代码。我需要根据<x> <metadata> <field><name>work</name><value>代码值找到y的值。

XML文件

<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())
                {
                    ?????????
                }

            }); 
            }       
        });

您可以帮我获取<value> truefalse的值,我必须将该值存储在隐藏的输入文本框中。

1 个答案:

答案 0 :(得分:2)

您可以使用以下内容:

$(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);
 }
});

基本上,它:

  • $(xml).find('x').each(function() {
    • 获取XML中的每个x元素
  • if (y == $(this).find('y').text()) {
    • 如果x有一个y子元素,其文本内容等于y
  • $(this).find('metadata field:has(name:contains("work")) value').text();
    • 击穿:
      • $(this).find('metadata field')
        • 找到field元素的metadata元素
      • $(this).find('metadata field:has(name:contains("work"))')
        • 仅限于那些{em>拥有 field孩子name内容"work"
        • $(this).find('metadata field:has(name:contains("work")) value').text();
      • value
        • 然后选择field:has(name:contains("work"))的{​​{1}}元素,并获取其文字。

下面的演示。

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>

而且,如果你是一个单行:

$(xml).find('x:has(y:contains("'+ y +'")) metadata field:has(name:contains("work")) value').text();

演示:

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>