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

创建Azure Function实现HTML表格转JSON时的问题排查

排查Azure Function中HTML表格转JSON的服务器错误原因

核心语法错误

你的代码里对象初始化时缺少逗号,这是导致编译失败、触发服务器错误的直接原因:
在TableData对象初始化块中,PmComp = values[1].InnerText末尾未添加逗号,C#语法解析失败,进而引发服务器端运行错误。

修正后的代码

#r "Newtonsoft.Json"

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using System.Collections.Generic;
using Newtonsoft.Json;
using System.Xml;

public class TableData
{
    public string PmRep { get; set; }
    public string PmComp { get; set; }
    public string PmAddr { get; set; }
}

public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{
    var outputTable = new List<TableData>();

    string requestBody = String.Empty;

    using (StreamReader streamReader =  new  StreamReader(req.Body))
    {
        requestBody = await streamReader.ReadToEndAsync();
    }

    dynamic data = JsonConvert.DeserializeObject(requestBody);
    string xmlString = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String((string)data?.Content));

    var xmlDocument = new XmlDocument();
    xmlDocument.LoadXml(xmlString);

    var xmlRows = xmlDocument.DocumentElement.SelectNodes("//tr");

    foreach (XmlNode xmlRow in xmlRows)
    {                
        var values = xmlRow.SelectNodes(".//td");

        // 确保当前行有3个<td>元素,避免索引越界
        if (values.Count == 3)
        {
            var row = new TableData()
            {
                PmRep = values[0].InnerText.Trim(),
                PmComp = values[1].InnerText.Trim(),
                PmAddr = values[2].InnerText.Trim()
            };

            outputTable.Add(row);
        }
    }

    return new OkObjectResult(outputTable);
}

额外优化说明

  • 新增values.Count == 3判断,避免遇到列数不足的行时触发索引越界异常
  • 对InnerText调用Trim(),清理表格内容中可能存在的多余空格、换行符
  • 移除了xmlString行末尾多余的分号

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 15:14:53