如何查找命名空间XML避免在jQuery中使用其他名称

时间:2014-11-25 13:08:19

标签: jquery ajax xml

我在jQuery上解析XML时遇到问题。我有像这样的XML文件

<field name="scheduleItems">
   <value>
     <field name="programID">364</field>
     <field name="programTime">05:00</field>
     <field name="programTimeEnd">05:30</field>
   <value>
</field>

这是我使用ajax解析时的代码

$.ajax({
    type: "GET",
    url: xmlFeed,
    dataType: "xml",
    success: function(xml) {
        $(xml).find("field[name*='scheduleItems']").each(function(i, obj){
             $(xml).find("value").each(function(i, obj){
                 var programTime = $(this).children("field[name*='programTime']").text();
                 var programTimeEnd = $(this).children("field[name*='programTimeEnd']").text();
              });
        });   
    },
    error: function() {
        console.log("has error!");
    }
 });  

打印 programTime 的结果时。 programTimeEnd 会像这样追加&gt;&gt;的&#34; programTime&#34;:&#34; 05:0005:30&#34;

我能解决吗?谢谢大家。

1 个答案:

答案 0 :(得分:0)

您使用*=表示“包含”,“programTimeEnd”包含“programTime”。使用=表示“等于”。

var parser = new DOMParser();
var xml = parser.parseFromString(
  '<field name="scheduleItems">'+
  '  <value>'+
  '  <field name="programID">364</field>'+
  '  <field name="programTime">05:00</field>'+
  '  <field name="programTimeEnd">05:30</field>'+
  '</value>'+
  '</field>',
  'application/xml'
);

var output = document.getElementById('output');
$(xml).find('field[name="scheduleItems"]').each(
  function(i, obj){
    $(this).find("value").each(
      function(i, obj){
        var programTime = $(this).children('field[name="programTime"]').text();
        var programTimeEnd = $(this).children('field[name="programTimeEnd"]').text();
        output.appendChild(
          document.createTextNode(
            programTime + ' - ' + programTimeEnd
          )
        );
        output.appendChild(document.createElement('br'));
      }
    );
  }
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<pre id="output"></pre>

注意:您的XML没有命名空间,这是一件好事,因为jQuery不支持XML命名空间。