使用jQuery解析XML命名空间

时间:2016-03-14 21:12:44

标签: jquery xml

这是我的XML

<?xml version="1.0" encoding="UTF-8"?>
<prj:Flow xmlns:prj="url1" xmlns:com="url2" xmlns:ns2="url3" xmlns:con="url4" xmlns:ns0="url5" xmlns:ns1="url6" xmlns:ns3="url7">
<prj:str>
<prj:layout comp="abcd">
  <prj:prop>
     <prj:property name="Hardik" value="5000"/>
     <prj:property name="Vipul" value="YES"/>
  </prj:prop>
</prj:layout>
</prj:str>
</prj:Flow>

这就是我试过的

$(document).ready(function() {
$.ajax({
  type: "GET",
  url: 'sample.xml',
  dataType: "xml",
  success: function(xml) {
      $(xml).find('prj\\:prop').each(function() {
          var $entry = $(this);
        var pic = $entry.find('prj\\:property').each(function(){
        var names = $(this).attr('name');
          alert(names);
          })
        })
  },
  error: function(xhr, status, error) {
      if (xhr.status != 404) {alert(error);} else {alert("404 xml not found");}
  }
});
})

我无法从xml命名空间中检索属性。我也尝试了.find('[nodename=prj:prop]');这样做的风格,但仍然没有结果。我在这里遗漏了一些非常基本的东西吗?

1 个答案:

答案 0 :(得分:0)

我认为问题在于您的Ajax代码,而不是XML解析代码。这对我来说很好:

<html>
<head>
<script src="https://code.jquery.com/jquery-1.12.1.min.js" integrity="sha256-I1nTg78tSrZev3kjvfdM5A5Ak/blglGzlaZANLPDl3I=" crossorigin="anonymous"></script>
<script>
$(function() {
  var xml = '<?xml version="1.0" encoding="UTF-8"?> <prj:Flow xmlns:prj="url1" xmlns:com="url2" xmlns:ns2="url3" xmlns:con="url4" xmlns:ns0="url5" xmlns:ns1="url6" xmlns:ns3="url7"> <prj:str> <prj:layout comp="abcd"> <prj:prop> <prj:property name="Hardik" value="5000"/> <prj:property name="Vipul" value="YES"/> </prj:prop> </prj:layout> </prj:str> </prj:Flow>';
  $(xml).find('prj\\:prop').each(function() {
    console.log("A");
    var $entry = $(this);
    var pic = $entry.find('prj\\:property').each(function() {
      console.log("B");
      var names = $(this).attr('name');
      console.log(names);
    });
  });
});
</script>
</head>
<body>
hi
</body>
</html>

因此,我会确保您的xml变量具有您认为的变量。