Фон
Я использую пакет xml-flow
npm для анализа XML с использованием потоков. Проблема в том, что узлы xml анализируются неожиданным образом.
Мое намерение - проанализировать огромный XML-файл, используя повторяющийся узел XML. Файл XML может быть любым URL, и повторяющийся узел будет предоставлен из пользовательского интерфейса.
Я пытался использовать параметры со всеми возможными значениями, но поведение при разборе, похоже, не изменилось.
Пример кода
Я использовал следующий пример XML -
<list>
<item>
<details>
<id>1</id>
</details>
</item>
<item>
<details>
<id>2</id>
<description>description for item 2</description>
</details>
</item>
</list>
Я попытался разобрать его, используя item
в качестве повторяющегося узла, следующим образом -
const fs = require("fs");
const flow = require("xml-flow");
const xmlStream = flow(fs.createReadStream("./sample.xml"));
xmlStream.on('tag:item', function (person) {
console.log(JSON.stringify(person, null, 4));
});
Я получил следующий ответ для 2 проанализированных xml-узлов -
// node 1
{
"$name": "item",
"details": "1"
}
// node 2
{
"$name": "item",
"details": {
"id": "2",
"description": "description for item 2"
}
}
Задача
Как вы можете видеть в ответе, я получаю другую структуру JSON для проанализированных узлов XML.
В случае первого узла XML узел <id>
не появился в объекте JSON (в отличие от второго узла XML), поскольку его родительский узел, а именно. <details>
имеет только один дочерний узел, а именно. <id>
.
Это вызывает проблемы в моем приложении, так как проанализированный XML может иметь тысячи записей, и относительный путь в структуре JSON к конечным узлам изменяется из-за этого поведения.
Например, если в xml-файле содержится 10000 записей и все записи после 5000-й записи имеют структуру узла 2, item.details
относительный путь будет указывать на строку для записей от 1 до 5000, тогда как тот же путь будет указывать на объект для оставшихся записей.
Альтернативный пакет NPM
Я пытался использовать xml-stream
, который работает по той же логике, но он связан с проблемой сбора подпунктов , объясненной здесь , что является еще более сложной проблемой для меня как входящей структуры XML в этом случае будет варьироваться от файла к файлу.
Дайте мне знать, если мне нужно предоставить больше информации.
Ура!