You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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工作流

  1. 新建一个Consumption类型的Logic App,选好触发条件(比如“当Blob存储中添加或修改文件时”,或者手动触发测试)。
  2. 在工作流里添加XSLT转换动作(在“数据操作”分类里找):
    • 选择“XML源”:比如从触发动作里获取的XML文件内容。
    • 选择“XSLT源”:可以选“内联”直接粘贴XSLT内容,也可以选“从Blob存储获取”加载你上传的XSLT文件。
  3. 转换完成后,输出的就是纯JSON文本了,你可以后续加个“解析JSON”动作验证结构,或者直接把结果保存到存储、发送到其他服务。

总结一下:核心就是把XSLT的输出方式改成text,让它直接生成JSON文本,而不是XML格式的JSONX,然后在C#或Logic Apps中对应处理这个纯文本输出,就能得到你需要的JSON格式啦。

内容的提问来源于stack exchange,提问作者 Divya Ghai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:37:04