0

我正在尝试使用 xml2js 库解析 XLIFF 文件。一切正常,但如果我有类似的东西:<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 解析器或其他任何方法来解决它吗?

4

2 回答 2

1

你也可能喜欢txml。当像这样使用它时txml.parse(yourXMLString),你会得到一个像这样的对象:

[
  {
    "tagName": "source",
    "attributes": {},
    "children": [
      "Welcome to ",
      {
        "tagName": "x",
        "attributes": {
          "id": "INTERPOLATION",
          "equiv-text": "{{ title }}"
        },
        "children": []
      },
      " my friend"
    ]
  }
]

我认为它看起来绝对符合您的要求。里面的三个孩子source,用起来很干净。此外,这个解析器只有 4kb 大小,不需要本地 c 编译,这会在不同架构上运行您的应用程序时造成困难。

免责声明:我是 txml 的作者,这个观点可能不客观 ;-)

于 2020-11-20T13:12:14.807 回答
0

使用fast-xml-parser。请在解析源代码时在选项中使用 stopNodes。它使 fast-xml 将内容视为纯字符串

var parser = require("fast-xml-parser");
parser.parse(srcFile, {ignoreAttributes: false, stopNodes: ["source", "target"],});
于 2021-11-09T11:50:29.230 回答