簡體   English   中英

訪問xml文件節點?

[英]access to a xml file nodes?

我有一個這樣的xml文件

<root>
    <section>
        <state>state one</state>
        <ct>
            <city>first city</city>
            <city>second city</city>
            <city>third city</city>
        </ct>
    </section>
</root>

而且我想訪問jquery中的城市名稱...我已經嘗試過s.th像這樣:

var x;
var ct = "";
for(i=1 ; 1=3 ; i++){
x = xmlDoc.getElementsByTagName('ct')[0].childNodes[i].childNodes[0].nodeValue;
ct += x;
}
$('div').html(ct);

但是,我只有第一個城市....而我無法訪問第二和第三個..這樣的代碼:

x = xmlDoc.getElementsByTagName('ct')[0].childNodes[2].childNodes[0].nodeValue;

什么都不給我!

自從您提到jQuery以來,您可以使用$.parseXML將XML解析為XML文檔,使用$()獲取該文檔的jQuery包裝器, find city節點,然后對它們進行所需的處理(例如使用map獲取其文字):

 var doc = $.parseXML( '<root>' + '<section>' + '<state>state one</state>' + '<ct>' + '<city>first city</city>' + '<city>second city</city>' + '<city>third city</city>' + '</ct>' + '</section>' + '</root>' ); var cities = $(doc).find("city"); var cityNames = cities.map(function() { return $(this).text(); }).get(); console.log(cityNames); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 

getmap轉換jQuery的包裝, map返回到普通數組)。

我們在find使用的選擇器可以更具體。 例如,您專門在ct容器中尋找city元素; 如果那很重要,我們的find選擇器應該是ct > city而不是city

 var doc = $.parseXML( '<root>' + '<section>' + '<state>state one</state>' + '<ct>' + '<city>first city</city>' + '<city>second city</city>' + '<city>third city</city>' + '</ct>' + '</section>' + '</root>' ); var cities = $(doc).find("ct > city"); var cityNames = cities.map(function() { return $(this).text(); }).get(); console.log(cityNames); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 

您在<ct>元素內看到多少個childNodes 最可能是3。實際上,那里有7個childNodes 其中三個是您的<city>元素,另外四個是由xml標記之間的空格(空格,換行符,回車符)組成的文本節點。

您應該使用返回元素數組而不是節點數組的函數(例如,getElementsByTagName)。

var cities = xmlDoc.getElementsByTagName('ct')[0].getElementsByTagName('city');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM