2014-02-11 60 views
0

我正在使用HTML5的JavaScript工作,並且陷入某個方面。我要做到以下幾點:Javascript和XML

  1. 創建使用JavaScript(這是相當容易的)從可用的在線
  2. 在表格中輸入的值的XML文件
  3. 提取細節的表格

例如,linkhttp://www.tfl.gov.uk/tfl/syndication/feeds/cycle-hire/livecyclehireupdates.xml包含每個工作站的循環可用性信息 1.我需要創建一個表格兩列。一個用於'Station Name',另一個用於'可用週期數' 2.我需要編寫代碼,只將上述鏈接作爲輸入並提取'Name'和'nbEmptyDocks'的值。

例如:<name> ABC,Surrey </name> <nbEmptyDocks> 10 </nbEmptyDocks>,我將如何提取ABC,Surrey和10的值並將它們放在相應的列中?

<!DOCTYPE html> 
<html> 
<body> 
<script language= "JavaScript"> 
document.write('<br> <br><table width="50%" border="1">'); document.write('<th> Dock Station'); 
document.write('<th> Number of Cycles'); 
document.write('<br> <br><table width="50%" border="1">'); 
var Connect = new XMLHttpRequest(); 
Connect.open("GET", "http://www.tfl.gov.uk/tfl/syndication/feeds/cycle-hire/livecyclehireupdates.xml", false); 
Connect.setRequestHeader("Content-Type", "text/xml"); 
Connect.send(null); 
var TheDocument = Connect.responseXML; 
var station = TheDocument.childNodes[0]; 
for (var i = 0; i < 5; i++) 
{ 
var stations = station.children[i]; 
var name = stations.getElementsByTagName("name"); 
var avail = Customer.getElementsByTagName("nbEmptyDocks"); 
document.write("<tr><td>"); 
document.write(name[0].textContent.toString()); 
document.write("</td><td>"); 
document.write(avail[0].textContent.toString()); 
document.write("</td>"); 
document.write("</tr>"); 
} 
document.write (" </table>"); 
</script> 
</body></html> 

在進一步閱讀,我明白了上面的代碼可能無法爲Chrome工作,我需要一個鍍鉻的作品。

<html> 
<body> 
<script> 
var xmlDoc; 
var xmlloaded = false; 

function initLibrary() 
{ 
importXML("http:///www.somedomain.com/somesubdir/somefile.xml"); 
} 

function importXML(xmlfile) 
{ 
try 
{ 
var xmlhttp = new XMLHttpRequest(); 
xmlhttp.open("GET", xmlfile, false); 
} 
catch (Exception) 
{ 
var ie = (typeof window.ActiveXObject != 'undefined'); 
if (ie) 
{ 
xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); 
xmlDoc.async = false; 
while(xmlDoc.readyState != 4) {}; 
xmlDoc.load(xmlfile); 
readXML(); 
xmlloaded = true; 
} 
else 
{ 
xmlDoc = document.implementation.createDocument("", "", null); 
xmlDoc.onload = readXML; 
xmlDoc.load(xmlfile); 
xmlloaded = true; 
} 
} 

if (!xmlloaded) 
{ 
xmlhttp.setRequestHeader('Content-Type', 'text/xml') 
xmlhttp.send(""); 
xmlDoc = xmlhttp.responseXML; 
readXML(); 
xmlloaded = true; 
} 
} 
</script> 
</body> 
</html> 

但這似乎沒有工作,要麼

+2

你在javascript中獲得了多少?我們不會從頭開始爲你編寫 – Johan

+1

除非你的站點因爲[同源策略](http://en.wikipedia)託管了xml文件,否則你可能無法用Javascript來做你想做的事情。組織/維基/ Same_origin_policy)。 – Danny

+0

@Johan我已將代碼添加到問題 – user3297662

回答

0

我會使用谷歌API用於抓取RSS和撕心裂肺它在網頁上提示:至於你說他們是不是標籤,你可以開始here.

0

他們自己,對於它們來說,通過DOM方法訪問它們已經相當微不足道了。

取而代之,您將需要抓取每個<item>中的<title>和/或<description>節點的textContent。一旦你完成了,你將需要做一些字符串處理。然而,這些字符串是相當可預測的,所以這很容易:

var text = "Max Temp: 8°C (46°F), Min Temp: 5°C (41°F), Wind Direction: SW, Wind Speed: 8mph, Visibility: good, Pressure: 1002mb, Humidity: 92%, Pollution: n/a, Sunrise: 08:13GMT, Sunset: 16:40GMT"; 

var pairs = text.split(", "), 
    info = {}; 
for (var i=0; i<pairs.length; i++) { 
    var pair = pairs[i].split(": "); 
    info[pair[0]] = pair[1]; 
} 
console.log(info) 
// {"Max Temp":"8°C (46°F)","Min Temp":"5°C (41°F)","Wind Direction":"SW","Wind Speed":"8mph","Visibility":"good","Pressure":"1002mb","Humidity":"92%","Pollution":"n/a","Sunrise":"08:13GMT","Sunset":"16:40GMT"} 
console.log(info["Max Temp"], info["Min Temp"]) 
// "8°C (46°F)", "5°C (41°F)" 
+0

我不確定我是否完全理解。讓我試着再次解釋我的疑問。
user3297662

+0

讓我試着再次解釋我的疑問。
假設我需要創建一個包含「站名」和「自行車數量」兩列的表格。 XML是從鏈接 - eq:www.xyz.uk/update/source.xml獲得的,示例XML文件是<?xml version =「1.0」encoding =「UTF-8」?> ABC 7

應該訪問該鏈接(不包括在我的代碼的XML文件)中的代碼,並從該鏈接將獲得電臺名稱(從標記「姓名」)自行車號(來自'nbBikes'標籤)並輸入表中的相應列 – user3297662