本文讲解如何安全解析包含 HTML 实体如 的 XML 字符串提取 parameterizedString 中的转义 HTML 内容并动态构建结构化 HTML 表格避免 DOM 解析错误与 XSS 风险。 本文讲解如何安全解析包含 html 实体如 、的 xml 字符串提取 中的转义 html 内容并动态构建结构化 html 表格避免 dom 解析错误与 xss 风险。在前端开发中常需处理嵌套了 HTML 片段的 XML 数据例如测试用例导出格式其中 parameterizedString 标签内容常以 HTML 实体形式编码如 Action Field 001。直接使用 DOMParser 解析原始 XML 字符串时若实体未被预处理或上下文不匹配极易触发解析错误如 parsererror 或空文档。关键在于XML 解析器本身能正确识别实体前提是文档类型声明合规但 textContent 返回的是已解码后的纯文本而我们需要的是可渲染的 HTML 结构——此时应将解码后的内容作为 HTML 插入而非文本。以下为推荐实现方案无需手动编写复杂解码函数const strXML steps id0 last4 step id1 typeValidateStep parameterizedString isformattedtrueDIVPAction Field 001/P/DIV/parameterizedString parameterizedString isformattedtrueDIVPExpected Result Field 001/P/DIV/parameterizedString description/ /step step id2 typeRunStep parameterizedString isformattedtrueDIVPAction Field 002/P/DIV/parameterizedString parameterizedString isformattedtrueDIVPExpected Result Field 002/P/DIV/parameterizedString description/ /step/steps;// ? 正确使用 application/xml 解析 XMLDOMParser 原生支持实体解码const doc new DOMParser().parseFromString(strXML, application/xml);if (doc.querySelector(parsererror)) { throw new Error(XML parsing failed: doc.querySelector(parsererror).textContent);}// 提取所有 step 元素const steps [...doc.querySelectorAll(step)];// 创建表格结构const table document.createElement(table);const tbody document.createElement(tbody);steps.forEach(step { const row document.createElement(tr); // 第一列step 类型type 属性 const typeCell document.createElement(td); typeCell.textContent step.getAttribute(type) || unknown; // 第二列parameterizedString 的内容已自动解码为 HTML 字符串 const htmlContent step.querySelector(parameterizedString)?.textContent || ; const contentCell document.createElement(td); contentCell.innerHTML htmlContent; // ?? 注意仅当内容可信时才用 innerHTML row.append(typeCell, contentCell); tbody.append(row);});table.append(tbody);document.body.append(table);配套样式增强可读性 唱鸭 音乐创作全流程的AI自动作曲工具集 AI 辅助作词、AI 自动作曲、编曲、混音于一体