2012-05-09 64 views
0

我在JavaScript中做了一個簡單的ajax調用,它返回一個ID,然後我需要再次調用ajax來獲取一個包含所有ID的XML文件,其中包含相關描述字符串作爲的XML。使用JavaScript在XML中查找ID

該ID的描述回來格式爲:

<Category> 
    <Id>1</Id> 
    <Descriptor>Accounts</Descriptor> 
</Category> 
<Category> 
    <Id>2</Id> 
    <Descriptor>Marketing</Descriptor> 
</Category> 
<Category> 
    <Id>3</Id> 
    <Descriptor>HR</Descriptor> 
</Category> 
etc... 

我如何查找針對該XML的ID值,並使用JavaScript返回描述字符串?

回答

2

使用jQuery你可以這樣做:

var xml = $.ajax({......}); //your xml 
var numb = $.ajax({......}); //returns 1,2 or 3 etc... 

var descriptor = $('id', xml).filter(function() { 
    return $(this).text() == numb; //filter elements based on text in the id tag 
}).siblings('Descriptor').text(); 

jQuery將治療呢作爲HTML,但它似乎工作都一樣。

FIDDLE

+0

油污+1。不過,由於可讀性很差,我幾乎被誘惑到了-1。 –

+0

由於某種原因,我的閱讀能力降低了嗎? – adeneo

+0

你也應該在你的'return'語句中解釋你正在做什麼。 –

1

這樣的功能的東西應該工作:

function searchXmlForId(id) { 
    var searchDescriptor = ""; 

    $.ajax({ 
     type: "GET", 
     url: "your/xml/file.xml", 
     dataType: "xml", 
     success: function(xml) { 
      $(xml).find('Category').each(function(){ 
       if (curId == $(this).find('Id').text()) return $(this).find('Descriptor').text(); 
      }); 
     } 
    }); 

    return false; 
} 

然後調用它像這樣:

var myDescriptorFromId = searchXmlForId(1); 

>> "Accounts" 
+1

+1,因爲你的解決方案比正則表達式這裏的魯棒性和可讀性更好,速度可能不是一個問題在這裏。爲了完整起見,我將發佈正則表達式答案。但我建議OP選擇這個。 –

+0

儘管有一個建議:我不是從每個類別中提取描述符,而是將它放在檢查中,並且消除局部變量。兩者都改變​​速度。我認爲這不會嚴重影響可讀性。即:'if(curId == $(this).find('Id')。text())return $(this).find('Descriptor')。text();' –

+0

是的,我可以做到這一點,事實上我會的。謝謝。 –

1

人們會跳到我的喉嚨在這裏暗示正則表達式,但我質疑這可能是最快的解決方案(爲仇敵,我解析XML這裏,並無意到 - 我只是通過文本方式提取信息):

var matches = xml.match(new RegExp('<Id>' + id + '<\\/Id>[\\s\\S]*?<Descriptor>(.*?)</Descriptor>', 'i')) 
var description = matches ? matches[1] : null; 
+0

哦,geez。 +1因爲聰明,但我真的很想跳下你的喉嚨。 –