#javascript #xml #webpack
#javascript #xml #webpack
Вопрос:
Я использую webpack в качестве пакета для приложения и использую XML-файл для его настройки. В настоящее время я пишу тесты для извлечения конфигурации из XML-файла, упакованного webpack.
Ссылка на эту статью webpack: Загрузка данных фрагмент кода, с которым у меня возникли проблемы, заключается в следующем:
import Data from './data.xml';
Я сам тестирую, я использую форму require, которая выглядит следующим образом:
const select = require('xpath.js');
const DOMParser = require('xmldom').DOMParser
const parser = new DOMParser();
const data = require('./app.config.xml'); // <- THIS IS MY PROBLEM
const xdocument = parser.parseFromString(data.toString(), 'text/xml');
Как «требовать» работает для XML-файла?
Этот код:
console.log("DATA: " data.toString());
выдает этот вывод:
DATA: [object Object]
Итак, я не знаю, какой объект создается require.
Я видел много других примеров кода о чтении xml в JSON, но я не знаю, что нужно для обработки объекта JSON. Я хочу запросить XML как XmlObject, чтобы можно было запускать к нему запросы xpath.
Я могу легко добраться до JSON, выполнив
JSON.stringify(data)
который отображает что-то вроде:
{"Application":{"$":{"name":"config-data"},"Imports":[{"Import":[{"$":{"from":"./another.config.xml"}}]}],"Con
which is not what I want. So how can I get the XML content from *data* as a string, which is what **parser.parseFromString** needs?
Мой тестовый код выглядит следующим образом:
describe.only('xpath examples (zenobia)', async assert => {
const xdoc = require('./app.config.xml');
let applicationNodes = select(xdoc, "/Application"); // THIS RETURNS a DOMObject
console.log(`Found ${applicationNodes.length} Application elements`);
assert({
given: 'an inline xml document with an Application',
should: 'Select an element from the root',
condition: applicationNodes !== null
});
});
Отображается это сообщение журнала:
Found 0 Application elements
для XML-документа, который является:
<?xml version="1.0"?>
<Application name="app">
<Imports/>
</Application>
Комментарии:
1.
DATA: [object Object]
это указывает на то,data
что это объект — так что, вероятно, это уже то, что вы хотите, т. Е. вам не нужно его анализировать2. Вы хотите сказать, что «данные» здесь — это XML-документ?
3. Я использую xpath.js для выполнения запросов (select=требовать(‘xpath.js ‘); const applicationNodes = select(xdoc, «/Application»); // Это не работает!
4. Я говорю, что это объект. Можете ли вы определить, какого типа? Я не могу. У меня нет вашего кода
5.
const application-nodes
это одна из проблем… и где объявлен xdoc
Ответ №1:
Если вы хотите читать XML-файлы в виде строк, вы можете просто использовать Webpack raw-loader со следующей конфигурацией
// webpack.config.js
module.exports = {
module: {
rules: [
{
test: /.xml$/i,
use: 'raw-loader',
},
],
},
};
Теперь data
в
const data = require('./app.config.xml');
Должны быть исходные данные из XML-файла (т. Е. строка) — теперь остальной ваш код должен работать должным образом