從XML

2012-02-17 11 views
0

只選擇特定國家值我在這個格式的XML飼料:從XML

<Country Name="ALBANIA"> 
    <Destination Name="TIRANA"> 
     <Destination_1>TIR</Destination_1> 
     <Destination_2/> 
     <Destination_3/> 
    </Destination> 
</Country> 
<Country Name="AUSTRALIA"> 
    <Destination Name="ADELAIDE"> 
     <Destination_1>ADL</Destination_1> 
     <Destination_2/> 
     <Destination_3/> 
    </Destination> 
    <Destination Name="ALICE SPRINGS"> 
     <Destination_1>ASP</Destination_1> 
     <Destination_2/> 
     <Destination_3/> 
    </Destination> 
    <Destination Name="BRISBANE"> 
     <Destination_1>BNE</Destination_1> 
     <Destination_2/> 
     <Destination_3/> 
    </Destination> 
    <Destination Name="CAIRNS"> 
     <Destination_1>CNS</Destination_1> 
     <Destination_2/> 
     <Destination_3/> 
    </Destination> 
    <Destination Name="DARWIN"> 
     <Destination_1>DRW</Destination_1> 
     <Destination_2/> 
     <Destination_3/> 
    </Destination> 
    <Destination Name="GOLD COAST"> 
     <Destination_1>OOL</Destination_1> 
     <Destination_2/> 
     <Destination_3/> 
    </Destination> 
    <Destination Name="HOBART"> 
     <Destination_1>HBA</Destination_1> 
     <Destination_2/> 
     <Destination_3/> 
    </Destination> 
    <Destination Name="MELBOURNE"> 
     <Destination_1>MEL</Destination_1> 
     <Destination_2/> 
     <Destination_3/> 
    </Destination> 
    <Destination Name="PERTH"> 
     <Destination_1>PER</Destination_1> 
     <Destination_2/> 
     <Destination_3/> 
    </Destination> 
    <Destination Name="SYDNEY"> 
     <Destination_1>SYD</Destination_1> 
     <Destination_2/> 
     <Destination_3/> 
    </Destination> 
</Country> 

現在,我試圖做的是從阿爾巴尼亞例如只選擇目的地,並張貼他們爲紐帶像這樣:

<p><a href="TIR.html">TIRANA</a> in ALBANIA</p> 

使用XML值的鏈接應該是這樣的

<p><a href="{{Destination_1}}.html">{{Destination Name}}</a> in {{Country Name}}</p> 

我能CRE爲所有國家吃了一份清單,但我不知道如何只顯示一個國家的價值。

THIS IS TO列表中所有項

$.ajax({ 
       type: "GET", 
       url: "test.xml", 
       dataType: "xml", 
       success: function(xml) { 
        $(xml).find('Country').each(function(){ 
         var countryName = $(this).attr('Name'); 
         if (countryName = localStorage.ArrivalCountry) { 
          var destinationName = $(this).find('Destination').attr('Name'); 
          $('<a class="listItem" href="#" id="'+destinationName+'">'+destinationName+'<div class="arrow"></div></a>').appendTo('#destinationList'); 
         } 


        }); 
       } 
      }); 
+1

做什麼代碼,你有至今? – 2012-02-17 08:14:33

+0

你有沒有考慮過使用XPath來解決這個問題?以下是有關使用jQuery的XPath的更多信息:http://dev-tips.com/featured/jquery-tip-using-xpath-selectors – ohaal 2012-02-17 08:15:53

+0

添加了我正在使用的代碼。 – Andrei 2012-02-17 08:30:13

回答

1

不知道你是如何刨過某一國家所有目的地使用此,遍歷所有國家?循環的代碼?如果您希望獲得更多幫助,請在您的問題中添加更多信息。

這些簡單的xpath給你你正在尋找的節點。

此XPath給你整個國家節點,在名稱=阿爾巴尼亞

//Country[@Name = 'ALBANIA'] 

這給你要從中提取名稱屬性目的節點(地拉那):

//Country[@Name = 'ALBANIA']/Destination 

這爲您提供您希望從中提取文本「TIR」的Destination_1節點

//Country[@Name = 'ALBANIA']/Destination/Destination_1 
+0

嘗試像這樣使用它:http://pastebin.com/LtQNb2ZV但它不起作用。 – Andrei 2012-02-17 08:24:03

0

首先,我建議你不要調用目標元素Destination_1,Destination_2等。說它是唯一的目標,並調用父類的目的地,即:

<Destinations> 
    <Destination></Destination> 
    <Destination></Destination> 
    <Destination></Destination> 
</Destination> 

我沒有改變的XML,但這裏有一個如何使用jQuery導航XML只是一個小例子:

<html> 
<head> 
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
</head> 
<BODY> 

<script type="text/javascript"> 
// need to add a root to the xml for it to be valid 
var xml = $.parseXML('<root><Country Name="ALBANIA">' + 
' <Destination Name="TIRANA">' + 
'  <Destination_1>TIR</Destination_1>' + 
'  <Destination_2/>' + 
'  <Destination_3/>' + 
' </Destination>' + 
'</Country>' + 
'<Country Name="AUSTRALIA">' + 
' <Destination Name="ADELAIDE">' + 
'  <Destination_1>ADL</Destination_1>' + 
'  <Destination_2/>' + 
'  <Destination_3/>' + 
' </Destination>' + 
' <Destination Name="ALICE SPRINGS">' + 
'  <Destination_1>ASP</Destination_1>' + 
'  <Destination_2/>' + 
'  <Destination_3/>' + 
' </Destination>' + 
' <Destination Name="BRISBANE">' + 
'  <Destination_1>BNE</Destination_1>' + 
'  <Destination_2/>' + 
'  <Destination_3/>' + 
' </Destination>' + 
' <Destination Name="CAIRNS">' + 
'  <Destination_1>CNS</Destination_1>' + 
'  <Destination_2/>' + 
'  <Destination_3/>' + 
' </Destination>' + 
' <Destination Name="DARWIN">' + 
'  <Destination_1>DRW</Destination_1>' + 
'  <Destination_2/>' + 
'  <Destination_3/>' + 
' </Destination>' + 
' <Destination Name="GOLD COAST">' + 
'  <Destination_1>OOL</Destination_1>' + 
'  <Destination_2/>' + 
'  <Destination_3/>' + 
' </Destination>' + 
' <Destination Name="HOBART">' + 
'  <Destination_1>HBA</Destination_1>' + 
'  <Destination_2/>' + 
'  <Destination_3/>' + 
' </Destination>' + 
' <Destination Name="MELBOURNE">' + 
'  <Destination_1>MEL</Destination_1>' + 
'  <Destination_2/>' + 
'  <Destination_3/>' + 
' </Destination>' + 
' <Destination Name="PERTH">' + 
'  <Destination_1>PER</Destination_1>' + 
'  <Destination_2/>' + 
'  <Destination_3/>' + 
' </Destination>' + 
' <Destination Name="SYDNEY">' + 
'  <Destination_1>SYD</Destination_1>' + 
'  <Destination_2/>' + 
'  <Destination_3/>' + 
' </Destination>' + 
'</Country></root>'); 
// looping the xml 
for (var i=0; i<xml.childNodes[0].childNodes.length; i++) 
{ 
    var country = xml.childNodes[0].childNodes[i]; 
    //alert(country.getAttribute('Name')); 

    // ... continue to loop the childNodes (destination) of country 
    for (var j=0; j<country.childNodes.length; j++) 
    { 
     // ... 
    } 
} 

// means you can easily (you can probably figure out the specifics): 
var countries = xml.childNodes[0]; 
var australia = null; 
$.each(countries.childNodes, function() { 
    if (this.getAttribute('Name') == 'AUSTRALIA') 
    { 
     australia = this; 
     return false; 
    } 
}); 

console.log(australia); 

// get a list to loop for all destinations 
australia = $(countries).find('Country[Name="AUSTRALIA"]'); 
var destinations = australia.find('Destination'); 
console.log(destinations); 

</script> 
</BODY> 
</html>