You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular 8中转换含HTML字符串的XML为JSON的解决方案求助

解决方案

方案1:调整fast-xml-parser配置(推荐)

你之前尝试过的fast-xml-parser本身支持指定节点停止解析子标签,直接将节点内所有内容作为纯字符串处理,不需要更换其他依赖包。

操作步骤

  1. 安装兼容Angular 8的版本:
npm install fast-xml-parser@3.21.1
  1. 解析时添加对应配置即可得到目标结果:
import { parse } from 'fast-xml-parser';

const xmlContent = `
<title>
    <html>
        <p>test</p>
    </html>
</title>
`;

const parserOptions = {
  ignoreAttributes: true,
  trimValues: true,
  // 配置遇到title标签时,直接提取内部原始内容作为值,不解析子标签
  stopNodes: ['title'],
  // 自动去除内容里的换行和多余空格,匹配预期输出格式
  tagValueProcessor: (tagName, tagValue) => {
    if (tagName === 'title') {
      return tagValue.replace(/\s+/g, ' ').replace(/>\s+</g, '><').trim();
    }
    return tagValue;
  }
};

const result = parse(xmlContent, parserOptions);
console.log(result);

输出结果完全符合需求:

{
    "title": "<html><p>test</p></html>"
}

方案2:自定义预处理+xml2js方案

如果需要兼容更多自定义场景,可以先预处理XML,将需要保留HTML内容的标签内部的尖括号先转义,解析完成后再反转义即可:

import { parseString } from 'xml2js';

const xmlContent = `
<title>
    <html>
        <p>test</p>
    </html>
</title>
`;

// 预处理:转义title标签内的<和>
const processedXml = xmlContent.replace(/<title>([\s\S]*?)<\/title>/g, (match, content) => {
  const escapedContent = content.replace(/</g, '&lt;').replace(/>/g, '&gt;');
  return `<title>${escapedContent}</title>`;
});

parseString(processedXml, { trim: true, explicitArray: false }, (err, result) => {
  // 反转义得到原始HTML内容
  result.title = result.title.replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/\s+/g, ' ').replace(/>\s+</g, '><').trim();
  console.log(result);
});

两种方案都可以在Angular 8环境下直接运行,无额外兼容问题。

内容的提问来源于stack exchange,提问作者Raviteja Voleti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 05:42:01