[英]Parsing XML file using only built-in JavaScript functions
我是編碼初學者,我正在嘗試使用 JavaScript 解析托管在 GitHub 上的 XML 文件,以提取例如嵌套在<book id="bk102">
中的<author>
節點中包含的信息<book id="bk102">
節點。
我知道 Stackoverflow 中有幾個類似的問題,我閱讀了很多,但我想要做的是僅使用內置的 JavaScript 函數從上述 XML 文件中提取數據。
老實說,我不知道這是否可能,但我會更詳細地解釋我試圖做的事情,以便為您提供全貌。
我正在使用名為Fulcrum的數據收集平台開發動態調查表。
Fulcrum 允許在其“數據事件”模塊中編寫 JavaScript 代碼(帶有一些自定義函數),以便與調查表單本身中包含的字段和計算進行交互。
Fulcrum 中的“數據事件”模塊不允許我安裝其他軟件包。 出於這個原因,我無法安裝,例如, 這里建議的xml-js
庫,以使用內置的 JavaScript JSON 函數,或者我無法使用DOMParser()
接口等,因為 Fulcrum 無法識別它。
閱讀 Fulcrum 文檔后,我發現我可以使用一個名為 REQUEST的自定義函數,並參考了以下示例。 Fulcrum 自定義函數用大寫字母標識。
// This example looks up the place name from OpenStreetMap when the location changes and fills in a text
// field with the place name. Replace 'place_name' below with a text field on your form.
ON('change-geometry', function(event) {
var options = {
url: 'https://nominatim.openstreetmap.org/search/' + LATITUDE() + ',' + LONGITUDE(),
qs: {
format: 'json',
polygon: 1,
addressdetails: 1
}
};
REQUEST(options, function(error, response, body) {
if (error) {
ALERT('Error with request: ' + INSPECT(error));
} else {
var data = JSON.parse(body);
if (data.length) {
SETVALUE('place_name', data[0].display_name);
}
}
});
});
這里唯一的問題是這個例子從一個 JSON 文件中讀取,而我需要從一個 XML 文件中讀取。
我嘗試編輯示例中的函數以使其適用於 XML 文件。 我就是這樣修改的。
ON('click', 'import_xml', function(event) {
var options = {
url: 'https://gist.githubusercontent.com/Ram-N/5189462/raw/46db0b43ad7bf9cbd32a8932f3ab981bd4b4da7c/books.xml',
qs: {
format: 'xml'
}
};
REQUEST(options, function(error, response, body) {
if (error) {
ALERT('Error with request: ' + INSPECT(error));
} else {
var data = body;
if (data.length) {
SETVALUE('test_field_xml', data);
}
}
});
});
它有效! 部分...當我單擊import_xml
超鏈接(請參閱下面的 1)時,我可以在test_field_xml
字段中導入整個 XML 文件(請參閱下面的 2),但我真的不知道如何只提取<author>
節點中包含的信息嵌套在<book id="bk102">
節點中。
關於如何進行的任何建議都會非常有幫助。 謝謝你,斯特凡諾。
我想我找到了一個非常“自制”的部分解決方案,也不是很實用或很好,但它有效。 我編輯了上面的代碼,如下所示:
ON('click', 'import_xml', function(event) {
var options = {
url: 'https://gist.githubusercontent.com/Ram-N/5189462/raw/46db0b43ad7bf9cbd32a8932f3ab981bd4b4da7c/books.xml',
qs: {
format: 'xml'
}
};
REQUEST(options, function(error, response, body) {
if (error) {
ALERT('Error with request: ' + INSPECT(error));
} else {
var data = body;
var test1 = body.substring(
body.lastIndexOf('<book id="bk102">') + 24,
body.lastIndexOf('<book id="bk103">') - 15
);
var test2 = test1.substring(
test1.lastIndexOf('<author>') + 8,
test1.lastIndexOf('</author>') - 0
);
if (data.length) {
SETVALUE('test_field_xml', test2);
}
}
});
});
在您看來,這可以以更好、更有效的方式完成嗎?
您說過您可以編寫 Javascript 代碼,但不能安裝其他 Javascript 包。 因此,答案是下載一個用 Javascript 編寫的開源 XML 解析器,並將其添加到您的代碼中,就好像它是您自己編寫的代碼的一部分一樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.