如何使用ajax将XML文件的指定内容放入jquery数组?

时间:2014-03-20 22:44:34

标签: jquery arrays

嗨我是jquery或javascript的新手,不知道有什么区别..我尝试读取xml文件并将该xml中的某些值显示到下拉列表中(选择)。使用的ajax方法读取xml ok,但是在我的下拉列表中我有多个相同的条目,所以我需要将这些条目放入某种容器中并循环遍历它们以删除它们。 到目前为止我已经

var XML_MAP_PATH = "/resources/XML/MapInformationXML.xml";
var selectedSiteName;
var buildingName;
$(document).ready(function () {

//Clear all drop down lists
$('#cboSiteNames >option').remove();

$('#cboFloors >option').remove();

//Read XML file and populate cboSiteNames drop down list
$.ajax({
    type: "GET",
    crossDomain: true,
    url: XML_MAP_PATH,
    context: document.body,
    dataType: "xml",
    xhrFields: { withCredentials: true },
    success: function (xml) { //If data is available(success) then..
        $(xml).find('Map').each(function () { //go to parent node in xml
            siteName = $(this).attr("Site"); //add all site names to siteName var

            $("#cboSiteNames").append($('<option></option>').attr("value", siteName).text(siteName)); //add values to dropdownlist

        });
    }
});
});

XML

<?xml version="1.0"?>
<MapInformation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Map Map_Name="New Mills" Site="New Mills" BuldingName="Mill" FloorNumber="0" ImageFilePath="C:\Users\--\SourceControl\Work\XSD\XSD stuff\XSD stuff\Images\NewMills0.png" />
  <Map Map_Name="New Mills" Site="New Mills" BuldingName="Mill" FloorNumber="1" ImageFilePath="C:\Users\--\SourceControl\Work\XSD\XSD stuff\XSD stuff\Images\NewMills1.png" />
  <Map Map_Name="New Mills" Site="New Mills" BuldingName="Mill" FloorNumber="2" ImageFilePath="C:\Users\--\SourceControl\Work\XSD\XSD stuff\XSD stuff\Images\NewMills2.png" />
  <Map Map_Name="New Mills" Site="New Mills" BuldingName="Round Tower" FloorNumber="0" ImageFilePath="C:\Users\--\SourceControl\Work\XSD\XSD stuff\XSD stuff\Images\NewMills0.png" />
  <Map Map_Name="New Mills" Site="New Mills" BuldingName="Round Tower" FloorNumber="1" ImageFilePath="C:\Users\--\SourceControl\Work\XSD\XSD stuff\XSD stuff\Images\NewMills1.png" />
  <Map Map_Name="New Mills" Site="New Mills" BuldingName="Round Tower" FloorNumber="2" ImageFilePath="C:\Users\--\SourceControl\Work\XSD\XSD stuff\XSD stuff\Images\NewMills2.png" />
  <Map Map_Name="Charfield" Site="Charfield" BuldingName="GES" FloorNumber="1" ImageFilePath="C:\Users\--\SourceControl\Work\XSD\XSD stuff\XSD stuff\Images\Charfield1.png" />
  <Map Map_Name="Miskin" Site="Miskin" BuldingName="Miskin Building 1" FloorNumber="0" ImageFilePath="C:\Users\--\SourceControl\Work\XSD\XSD stuff\XSD stuff\Images\NewMills2.png" />
  <Map Map_Name="Miskin" Site="Miskin" BuldingName="Miskin Building 2" FloorNumber="1" ImageFilePath="C:\Users\--\SourceControl\Work\XSD\XSD stuff\XSD stuff\Images\Charfield1.png" />
</MapInformation>

2 个答案:

答案 0 :(得分:0)

如果要避免重复条目,则应创建一个空对象并使用它来跟踪重复项。在创建option元素之前,如果它没有创建元素并将其值作为属性添加到对象,请检查对象上是否存在其值的属性。

这比创建元素然后循环并删除它们要有效得多。

更改:

success: function (xml) { //If data is available(success) then..
        $(xml).find('Map').each(function () { //go to parent node in xml
            siteName = $(this).attr("Site"); //add all site names to siteName var

            $("#cboSiteNames").append($('<option></option>').attr("value", siteName).text(siteName)); //add values to dropdownlist

        });
    }

success: function (xml) { //If data is available(success) then..
        var map = {};
        $(xml).find('Map').each(function () { //go to parent node in xml
            siteName = $(this).attr("Site"); //add all site names to siteName var

            if (!map.hasOwnProperty(siteName)) { // Check if siteName already exists
                map.siteName = true; // Set the siteName property on map to avoid duplicates
                $("#cboSiteNames").append($('<option></option>').attr("value", siteName).text(siteName)); //add values to dropdownlist
            }
        });
    }

答案 1 :(得分:0)

好的,所以我对乔治的代码略有改动,这些代码大有帮助。以下是我在不使用属性进行检查的情况下完成此工作所做的工作。

 success: function (xml) { //If data is available(success) then..
            var map = [];
            $(xml).find('Map').each(function () { //go to parent node in xml
                siteName = $(this).attr("Site"); //add all site names to siteName var
                if ($.inArray(siteName, map) == -1) {
                    map.push(siteName);
                    $("#cboSiteNames").append($('<option></option>').attr("value", siteName).text(siteName)); //add values to dropdownlist
                }