1

我正在尝试将后端服务器的 xml 响应(它使用文本 XMLHttpRequestResponseType)映射到打字稿接口。现在,我尝试使用 xml2js 将 xml 映射到 JSON,然后将 JSON 映射到 typescript 接口(我正在使用 Angular 5)。问题是 xml2js 将呈现以下内容:

假设我们有以下 xml:

<xmlTag attr1="value1" attr2="value2>
    <innerTag attr3="value3">value4</innerTag>
</xmlTag>

定义接口的方式如下:

export interface XmlTag {
    attr1?: string;
    attr2?: string;
    innerTag?: InnerTag;
}

export interface InnerTag {
    attr3?: string;
    innerTagValue?: string;
}

问题是 xml2js 将 xml 属性映射为 '$' 作为 e 键和一个嵌套的 json 对象作为它的值。例子:

<xmlTag attr1="value1" attr2="value2>
    <innerTag attr3="value3">value4</innerTag>
</xmlTag>

转化为: 图像

所以一个'$'用作标签属性的键和一个嵌套的json对象作为一个值,包含所有属性和一个'_'作为标签之间的值。

当我需要将它绑定到 HTML 页面中时,我必须使用 {{innerTag.$.attr3}} 访问(例如 attr3),从而使我的界面无用。

有没有办法(可能是库)将响应映射到接口(每个 xml 标签都应该是一个接口,接口的属性是 xml 标签属性和嵌套标签)?还是我必须手动完成?

谢谢!

4

1 回答 1

-1

我认为这就是你想要做的:

// This is the interface that you want to use for that parser.
export interface Xml2Js {
  $?: {
    [key: string]: string;
  };
  innerTag?: Array<Xml2Js>;
  _?: string;
}

// This should be the relative structure of the JSON file (based on the screenshot you gave) that should let you get through the data that you need, assuming that you know the keys for the attributes ahead-of-time. Otherwise, you are going to have to write some fancy JavaScript to get all of that parsed.
const val: Xml2Js = {
  $: {
    'attr1': 'value1',
    'attr2': 'value2'
  },
  innerTag: [
    {
      $: {
        'attr3': 'value3'
      },
      _: 'value4'
    }
  ]
};

于 2018-02-16T02:15:11.093 回答