Как «потребовать» xml-файл (загруженный webpack) для чтения содержимого xml в javascript

#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-файла (т. Е. строка) — теперь остальной ваш код должен работать должным образом