Как «потребовать» XML-файл (загруженный через веб-пакет), чтобы прочитать XML-содержимое в JavaScript - PullRequest
1 голос
/ 15 марта 2019

Я использую webpack в качестве упаковщика для приложения и использую XML-файл для его конфигурации. В настоящее время я пишу тесты для извлечения конфигурации из файла XML, упакованного веб-пакетом.

Ссылка на статью об этом веб-пакете: Загрузка данных Часть кода, с которой я столкнулся, это:

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');

Как работает 'require' для файла XML?

Этот код:

console.log("DATA: " + data.toString());

производит этот вывод:

DATA: [object Object]

Так что я не знаю, какой объект создается по требованию.

Я видел много других примеров кода о чтении 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 Ответ

1 голос
/ 15 марта 2019

Если вы хотите читать 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 (то есть строка) - остальная часть вашего кода теперь должна работать как положено

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