将 JSON 转换为旧的 XML 格式

Convert JSON to and old XML format

我要转换:

{
  Employer: {
    Name: 'Sample',
    Age: 23
  }
}

收件人:

<EMPLOYER NAME="Sample" AGE="23"></EMPLOYER>

这可能吗?或者,如果您能推荐一个 npm 包,我将不胜感激。

找到 XML 个节点 <element><\element>

您可以使用此正则表达式来匹配 XML 个节点

const regex = /['"]?(\w+)['"]?[ ]?:[ ]?{(.[^}]+)}/gms;

Regexp101 调试 link:https://regex101.com/r/71cphG/3

const findNodes = (source) => {
    const regexNodes = /['"]?(\w+)['"]?[ ]?:[ ]?{(.[^}]+)}/gms;

    let nodes = [];
    while (m = regexNodes.exec(str)) {
        let nodeName = m[1]
        let nodeBody = m[2]

        nodes.push({ name: nodeName, body: nodeBody });
    }
    return nodes;
}

查找XML节点参数age=20

您可以像这样用正则表达式匹配节点参数:

const regex = /\s+(\w+) ?: ?['"]?(.[^'^"\n]+)['"]?/gms;

Regexp101 调试 link:https://regex101.com/r/upMtcz/1

const generateNode = (nodeName, jsonBody) => {
    const regexParams = /\s+(\w+) ?: ?['"]?(.[^'^"\n]+)['"]?/gms;

    let result = `<${nodeName}`;
    while (matches = regexParams.exec(jsonBody)) {
        let param = `${matches[1]}=${matches[2]}`;
        result += ` ${param}`;
    }
    result += `></${nodeName}>`

    return result;
}

打印结果

const findNodes = (source) => {
    const regexNodes = /['"]?(\w+)['"]?[ ]?:[ ]?{(.[^}]+)}/gms;

    let nodes = [];
    while (m = regexNodes.exec(str)) {
        let nodeName = m[1]
        let nodeBody = m[2]

        nodes.push({ name: nodeName, body: nodeBody });
    }
    return nodes;
}

const generateNode = (nodeName, jsonBody) => {
    const regexParams = /\s+(\w+) ?: ?['"]?(.[^'^"\n]+)['"]?/gms;

    let result = `<${nodeName}`;
    while (matches = regexParams.exec(jsonBody)) {
        let param = `${matches[1]}=${matches[2]}`;
        result += ` ${param}`;
    }
    result += `></${nodeName}>`

    return result;
}

const str = `{
    "Employer" : {
      Name: 'Sample',
      Age: 23
    },
  Employer: {
      Name: 'Sample',
      Age: 23
    },
  Employer: {
      Name: 'Sample',
      Age: 23
    }
  }`;

findNodes(str)
  .map(({ name, body }) => generateNode(name, body))
  .forEach(element => console.log(element))