ADF中XML转JSON时xml:lang属性未转换的技术咨询
解决Azure Data Factory中XML转JSON时保留xml:lang属性的问题
默认情况下,ADF的XML转JSON会仅提取<displayname>元素的文本值并生成数组,丢失xml:lang属性的关联关系。要保留语言标识,可通过以下两种方案实现:
方案一:使用Mapping Data Flow自定义转换
- 配置XML源:确保源数据集正确解析XML结构,ADF会自动将
<displayname>的文本值和xml:lang属性识别为独立字段。 - 添加派生列转换:创建结构体列(例如
displayname_entry),表达式为:
该表达式将语言属性与文本值封装为一个关联对象。struct(lang: @xml:lang, value: trim(displayname)) - 聚合生成数组:添加Aggregate转换,按父节点分组,使用
collect(displayname_entry)函数将所有语言条目收集为数组,命名为displayname。 - 输出JSON:将处理后的数据写入JSON数据集,最终得到包含语言标识的对象数组。
方案二:使用XSLT预处理XML
通过XSLT将原XML的<displayname>元素转换为包含语言和文本的结构化节点,再进行JSON转换:
- 编写XSLT样式表:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/*"> <root> <xsl:for-each select="displayname"> <displayname> <lang><xsl:value-of select="@xml:lang"/></lang> <value><xsl:value-of select="normalize-space(text())"/></value> </displayname> </xsl:for-each> </root> </xsl:template> </xsl:stylesheet> - 在Copy Activity中启用XSLT:在Copy Activity的源设置中,找到XSLT选项,上传或引用上述样式表文件。
- 转换为JSON:经过XSLT处理后的XML会将每个
<displayname>拆分为<lang>和<value>子元素,后续转JSON时会自动生成关联语言标识的对象数组。
预期转换结果
"displayname": [ {"lang": "deAT", "value": "Weiß"}, {"lang": "deCH", "value": "Weiß"}, {"lang": "xdefault", "value": "Colour Portable Photo Printer White"}, {"lang": "esES", "value": "Canon SELPHY CP1000: blanco"}, ... ]
内容的提问来源于stack exchange,提问作者Alefiya S. Tikiwala
相关产品推荐
相关产品推荐

