XSLT3.0处理含HTML结构的JSON转XML需求问询
单份XSLT 3.0即可完成需求
完全可以用单份XSLT 3.0实现JSON转XML,同时处理content字段内的转义HTML——替换指定div为RootElementforContent并保留内部HTML结构。核心思路是先将JSON转成XML,再解析转义的HTML片段,最后替换目标节点。
实现代码示例
假设你的JSON输入结构如下(content字段包含转义HTML):
{ "title": "示例文档", "content": "<div><h2>标题</h2><p>这是一段带<b>加粗</b>的文本</p></div>" }
对应的XSLT 3.0代码:
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes" encoding="UTF-8"/> <!-- 处理输入的JSON,先转成初始XML结构 --> <xsl:template match="/"> <xsl:variable name="json-raw-xml" select="json-to-xml(.)"/> <xsl:apply-templates select="$json-raw-xml/node()"/> </xsl:template> <!-- 匹配content字段对应的XML节点,处理转义HTML --> <xsl:template match="string[@key='content']"> <!-- 解析转义的HTML片段为节点集 --> <xsl:variable name="html-nodes" select="parse-xml-fragment(.)"/> <!-- 替换外层div为RootElementforContent,保留内部内容 --> <RootElementforContent> <xsl:apply-templates select="$html-nodes/div/node()"/> </RootElementforContent> </xsl:template> <!-- 默认模板:复制其他JSON节点的结构 --> <xsl:template match="*"> <xsl:copy> <xsl:copy-of select="@*"/> <xsl:apply-templates/> </xsl:copy> </xsl:template> </xsl:stylesheet>
关键逻辑说明
- JSON转XML:用XSLT 3.0内置函数
json-to-xml()将JSON转换为标准结构的XML,其中content字段会被转为<string key="content">转义HTML字符串</string>。 - 解析转义HTML:通过
parse-xml-fragment()把content里的转义HTML字符串解析为可操作的XML节点集。 - 替换节点:直接提取原div的子节点,包裹到
RootElementforContent中,完成替换并保留内部HTML结构。
扩展场景处理
如果需要替换content字段内所有div节点(而非仅外层div),可以添加模式模板实现递归替换:
<!-- 替换content里的所有div --> <xsl:template match="string[@key='content']"> <xsl:variable name="html-nodes" select="parse-xml-fragment(.)"/> <xsl:apply-templates select="$html-nodes" mode="replace-div"/> </xsl:template> <xsl:template match="div" mode="replace-div"> <RootElementforContent> <xsl:apply-templates select="@*|node()" mode="replace-div"/> </RootElementforContent> </xsl:template> <!-- 复制其他HTML节点和属性 --> <xsl:template match="@*|node()" mode="replace-div"> <xsl:copy> <xsl:copy-of select="@*"/> <xsl:apply-templates mode="replace-div"/> </xsl:copy> </xsl:template>
内容的提问来源于stack exchange,提问作者Rupesh_Kr
相关产品推荐
相关产品推荐

