如何正确解析含 HTML 实体的 XML 字符串并渲染为 HTML 表格

本文讲解如何安全解析包含 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 id="0" last="4"> <step id="1" type="ValidateStep"> <parameterizedString isformatted="true"><DIV><P>Action Field 001</P></DIV></parameterizedString> <parameterizedString isformatted="true"><DIV><P>Expected Result Field 001</P></DIV></parameterizedString> <description/> </step> <step id="2" type="RunStep"> <parameterizedString isformatted="true"><DIV><P>Action Field 002</P></DIV></parameterizedString> <parameterizedString isformatted="true"><DIV><P>Expected Result Field 002</P></DIV></parameterizedString> <description/> </step></steps>`;// ? 正确:使用 application/xml 解析 XML(DOMParser 原生支持实体解码)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 自动作曲、编曲、混音于一体

相关推荐
马良神笔13 分钟前
2026 年Rag最近技术前沿总结
后端·python·django
不像程序员的程序媛41 分钟前
maven基础
python·pycharm·maven
xiaogai_gai2 小时前
仅查询策略实战:从金蝶云·星空旗舰版定时拉取收料通知单
大数据·数据库·python
小天源2 小时前
从 Nginx 日志到访问分析:轻量化网站监测服务的架构实践
jvm·nginx·网络安全·架构·网络监控
数据工匠老o2 小时前
异构数据库DDL同步:260条链路的结构变更自动适配方案
数据库·架构
benchmark_cc2 小时前
Python 量化系统如何设计统一的数据访问接口:从策略解耦到数据层架构
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
const_qiu2 小时前
第四章 00:开篇 —— 从「会聊天」到「记得住、会干活、能协作」
java·开发语言·人工智能·python
这个DBA有点耶3 小时前
银行业市占率最高的国产数据库是谁?先搞清楚“市占率”的四种口径
数据库·程序员·架构
估值探索者3 小时前
【Python量化选股流水线 #04】选股器好不好用?「昨日候选→今日表现」回看验收
开发语言·python·股票数据·股票数据api接口
田里的水稻4 小时前
PyTorch_Dataloader\TensorBoard---数据加载与可视化
人工智能·pytorch·python·神经网络·机器学习