Я использую 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>