Извлечение только имен из XML-файла и помещение их в массив в JavaScript - PullRequest
0 голосов
/ 12 июля 2019

// https://www.w3schools.com/xml/simple.xml

// Мне дан вышеупомянутый xml-файл, в котором есть названия пунктов меню наряду с другими вещами (цена, калории и т. Д.), И мне нужно поместить только имена в массив, используя кодировку JavaScript. Я использую repl.it, и я уже сохранил файл в формате .xml на стороне моей программы. Мне просто нужно знать, как извлечь только имена в массив. Например, массив должен выглядеть следующим образом: [бельгийские вафли, клубничные бельгийские вафли, (и так далее)].

// Кроме того, мне нужно поместить калории, цену и другие данные в отдельные массивы, но я уверен, что если я научусь делать массив для одной вещи, я смогу сделать и другие массивы.

// В прошлом я создавал этот код для извлечения результатов из файла со списком результатов (откройте ссылку repl.it в комментариях, чтобы увидеть ее в действии):

// This program uses a file which has 6 peoples scores to calculate and display the max., min., and ave. scores and also puts them in an array. The program reads the file, trims out the strings so only the numbers are left & converted to numbers, limits the average score to the hundreths place, and verifies the file exists. The number of scores can be changed from 6 and the program would still work.
// Reference(s): https://www.w3schools.com/jsref/jsref_tofixed.asp
// https://codeburst.io/javascript-arrays-finding-the-minimum-maximum-sum-average-values-f02f1b0ce332
// Repl.it link: https://repl.it/live/AFSloyKSNJQjlA

main();

function main() {
    var filename = "scores.txt";

    if(!fileExists(filename)) {
        console.log(`File ${filename} is missing.`)
        return
    }

    var scores = [];
    var scores = readFile("scores.txt");
    console.log(scores);

    var maximum = getMax(scores);
    console.log("Maximum score: " + maximum)

    var minimum = getMin(scores);
    console.log("Mininum score: " + minimum);

    var sum = getSum(scores);

    var ave = sum / scores.length;
    var ave = ave.toFixed(2);
    console.log("Average score: " + ave);
}

function fileExists(filename) {
    var fs = require('fs');
    return fs.existsSync(filename);
}

function readFile(filename) {
    var fs = require('fs');
    var scores = [];

    var contents = fs.readFileSync(filename, 'utf8');
    lines = contents.split('\n');

    for (var index = 0; index < lines.length; index++)  {
        var pos = lines[index].indexOf(',') + 1;
        var scoreStr = lines[index].substring(pos).trim();
        var score = Number(scoreStr);
        if (!isNaN(score)) {
          scores.push(score);
        }
    }

    return scores;
}

function getMax(scores) {
    scores.sort(function(a, b){return b - a});
    var maximum = scores[0];

    return maximum;
} 

function getMin(scores) {
    scores.sort(function(a, b){return a - b});
    var minimum = scores[0];

    return minimum;
}

function getSum(scores)  {
    return scores.reduce(function(a,b){
      return a + b
    }, 0);
}

1 Ответ

0 голосов
/ 12 июля 2019

Есть два способа сделать это. Если у вас есть строка XML, которую вам нужно просмотреть, и все, что вам нужно - это содержимое одного типа тега, вы можете запустить эту строку через это регулярное выражение, чтобы получить то, что вам нужно:

// xmlString is a string with the whole XML document in it
const foods = xmlString.match(/(?<=<name>)[A-Za-z ]+(?=<\/name>)/g);

Если вы хотите получить его путем обхода XML DOM, вы можете использовать стандартные инструменты манипулирования DOM в JavaScript, например:

const foodTagList = document.querySelectorAll('food name'); // selects all name nodes under food nodes
const foodList = [];
foodTagList.forEach((el) => foodList.push(el.innerHTML)) // can't use .map because foodTagList isn't an array
console.log(foodList); //prints the list of foods in array form

Наконец, если у вас есть XML в виде строки и вы хотите выполнить обход DOM, вы можете запустить его с помощью метода parseFromString DOMParser и затем использовать инструкции для обхода DOM выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...