如何在使用 fast-xml-parser 构建 XML 时包含属性值?

问题描述 投票:0回答:1

fast-xml-parser 版本 4.3.6

描述

我需要包含 xml 属性(tokenized="true"),如下所示:

<custom-tag tokenized="true">test test &gt; 14</custom-tag>

输入

代码

var defaultXmlOptions = {
      ignoreAttributes: false,
      attributeNamePrefix: "@_",
      indentBy: "  ",
      textNodeName: "#text",
      format: true,
  },
var testJson = { component: {
      "custom-tag": {
          "#text": "test test > 14",
          "@_tokenized": true
      }
  }}

这是转换的代码:

var parser = new XMLBuilder(defaultXmlOptions);
var xml = parser.build(testJson);

输出

<component>
  <custom-tag tokenized>test test &gt; 14</custom-tag>
</component>

该属性应为“true”

预期产出

<component>
  <custom-tag tokenized="true">test test &gt; 14</custom-tag>
</component>

曾经有效的旧代码

var Parser = require("fast-xml-parser").j2xParser;
var parser = new Parser(defaultXmlOptions);
var xml = parser.parse(testJson);

现在将我的项目从 CRA 转换为 Vite 无法使用 require。

javascript reactjs node.js npm vite
1个回答
0
投票

您缺少的是 XMLBuilder 中的选项

suppressBooleanAttributes
。默认情况下,像
true
这样的布尔属性将在构建的 XML 中省略其值。

function demo() {
  var defaultXmlOptions = {
    ignoreAttributes: false,
    attributeNamePrefix: "@_",
    indentBy: "  ",
    textNodeName: "#text",
    format: true,
    // You need this to preserve boolean values!
    suppressBooleanAttributes: false,
  };
  var testJson = {
    component: {
      "custom-tag": {
        "#text": "test test > 14",
        "@_tokenized": true
      }
    }
  };

  var parser = new XMLBuilder(defaultXmlOptions);
  var xml = parser.build(testJson);
  console.log(xml);
}

document.addEventListener("readystatechange", () => document.readyState === "complete" && demo());
<script type="module">
  import { XMLBuilder } from 'https://cdn.jsdelivr.net/npm/[email protected]/+esm';
  window.XMLBuilder = XMLBuilder;
</script>

© www.soinside.com 2019 - 2024. All rights reserved.