如何在C#或Azure Logic Apps中用XSL转XML为JSON?格式不符求助
嘿,我来帮你搞定这个XML转JSON的问题!你之前得到JSONX格式,本质是XSLT输出的是XML结构而不是纯文本JSON,不管是用C#还是Azure Logic Apps,都能调整解决,咱们一步步来:
在C#中用XSLT实现XML到纯JSON的转换
先解决JSONX的核心问题
你之前的代码生成JSONX,是因为XSLT默认输出XML,而你又用XmlDocument去接收结果,相当于把JSON包装成了XML结构。咱们要做的是让XSLT直接输出纯文本格式的JSON,再调整C#代码适配这种输出。
步骤1:编写正确的XSLT(输出纯JSON)
举个简单的例子,假设你的源XML是这样:
<Root> <User> <Name>Alice</Name> <Age>30</Age> </User> </Root>
对应的XSLT要改成这样,关键是用<xsl:output method="text" />指定输出纯文本:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text" encoding="utf-8" /> <xsl:template match="/Root"> { "User": { "Name": "<xsl:value-of select="User/Name" />", "Age": <xsl:value-of select="User/Age" /> } } </xsl:template> </xsl:stylesheet>
如果你的XML有数组结构,比如多个User,可以用<xsl:for-each>循环生成JSON数组,还要注意处理逗号避免格式错误:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text" encoding="utf-8" /> <xsl:template match="/Root"> { "Users": [ <xsl:for-each select="User"> { "Name": "<xsl:value-of select="Name" />", "Age": <xsl:value-of select="Age" /> }<xsl:if test="position() != last()">,</xsl:if> </xsl:for-each> ] } </xsl:template> </xsl:stylesheet>
步骤2:调整C#代码处理纯文本输出
你之前用XmlDocument接收结果是错的,应该直接把输出写到文本流或者字符串里:
using System; using System.IO; using System.Xml.Xsl; class XmlToJsonConverter { static void Main() { string xmlPath = "你的输入XML路径"; string xslPath = "你的XSLT文件路径"; string outputJsonPath = "输出JSON的路径"; // 加载XSLT样式表 XslCompiledTransform xslt = new XslCompiledTransform(); xslt.Load(xslPath); // 直接输出到JSON文件 using (StreamWriter writer = new StreamWriter(outputJsonPath)) { xslt.Transform(xmlPath, null, writer); } // 如果需要获取JSON字符串 using (StringWriter sw = new StringWriter()) { xslt.Transform(xmlPath, null, sw); string jsonResult = sw.ToString(); Console.WriteLine("转换后的JSON:\n" + jsonResult); } } }
在Azure Logic Apps中用XSLT实现XML到JSON的转换
Logic Apps里操作更直观,同样要确保XSLT输出纯文本JSON,具体步骤如下:
步骤1:准备好正确的XSLT
和上面C#里的XSLT一样,用<xsl:output method="text" />输出纯文本JSON,你可以把这个XSLT文件上传到Azure Blob存储,或者直接复制内容备用。
步骤2:搭建Logic Apps工作流
- 新建一个Consumption类型的Logic App,选好触发条件(比如“当Blob存储中添加或修改文件时”,或者手动触发测试)。
- 在工作流里添加XSLT转换动作(在“数据操作”分类里找):
- 选择“XML源”:比如从触发动作里获取的XML文件内容。
- 选择“XSLT源”:可以选“内联”直接粘贴XSLT内容,也可以选“从Blob存储获取”加载你上传的XSLT文件。
- 转换完成后,输出的就是纯JSON文本了,你可以后续加个“解析JSON”动作验证结构,或者直接把结果保存到存储、发送到其他服务。
总结一下:核心就是把XSLT的输出方式改成text,让它直接生成JSON文本,而不是XML格式的JSONX,然后在C#或Logic Apps中对应处理这个纯文本输出,就能得到你需要的JSON格式啦。
内容的提问来源于stack exchange,提问作者 Divya Ghai
相关产品推荐
相关产品推荐

