#node.js #xml #xliff #xml2js
#node.js #xml #xliff #xml2js
Вопрос:
Я пытаюсь проанализировать файл XLIFF с помощью библиотеки xml2js. Все работает нормально, но если у меня будет что-то подобное: <source>Welcome to <x id="INTERPOLATION" equiv-text="{{ title }}"/> my friend</source>
я получу [{"_":"Welcome to my friend","x":[{"$":{"id":"INTERPOLATION","equiv-text":"{{ title }}"}}]}]
. Я в основном теряю порядок частей предложения. Я ожидал бы получить массив из 3 частей:
"Welcome to "
[{"$":{"id":"INTERPOLATION","equiv-text":"{{ title }}"}}]
" my friend"
Но вместо этого я получаю:
"Welcome to my friend"
[{"$":{"id":"INTERPOLATION","equiv-text":"{{ title }}"}}]
Если бы я попытался снова воссоздать строку, я бы получил <source>Welcome to my friend<x id="INTERPOLATION" equiv-text="{{ title }}"/></source>
Есть идеи, как ее решить с помощью этого анализатора XML или любого другого?
Комментарии:
1. Найдено решение: я использую анализатор «sax». У вас есть полный контроль.
Ответ №1:
вам также может понравиться txml. При использовании этого типа txml.parse(yourXMLString)
вы получаете объект, подобный этому:
[
{
"tagName": "source",
"attributes": {},
"children": [
"Welcome to ",
{
"tagName": "x",
"attributes": {
"id": "INTERPOLATION",
"equiv-text": "{{ title }}"
},
"children": []
},
" my friend"
]
}
]
Я думаю, что это выглядит абсолютно так, как вы ищете. Три дочерних элемента внутри source
, очень просты в использовании. Кроме того, этот анализатор имеет размер всего 4 КБ, и нет необходимости в компиляции собственного c, что вызовет трудности при запуске вашего приложения на другой архитектуре.
Отказ от ответственности: я являюсь автором txml, и это мнение может быть не объективным 😉
Ответ №2:
С помощью fast-xml-parser. Пожалуйста, используйте stopNodes в options при анализе источника. Это позволяет fast-xml обрабатывать содержимое как простые строки
var parser = require("fast-xml-parser");
parser.parse(srcFile, {ignoreAttributes: false, stopNodes: ["source", "target"],});