Проблема с синтаксическим анализом XLIFF с помощью анализатора XML узла

#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"],});