使用 C# 不使用 xslt 将 XML 转换为 CSV

2024-04-20

我一直在网上搜索,我假设有人必须在我之前需要这个并且做得更好,以获取 xml 到 csv 转换器。我有一个非常标准的 xml,如下:

<ArrayOfDealer xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
    <Dealer>
        <Cmf>76066699</Cmf>
        <DealerNumber/>
        <DealershipName>BROWARD MOTORSPORTS - WPB</DealershipName>
    </Dealer>
    <Dealer>
        <Cmf>76071027</Cmf>
        <DealerNumber/>
        <DealershipName>BROWARD MOTORSPORTS OF FT LAUDERDALE LLC</DealershipName>
    </Dealer>
    <Dealer>
        <Cmf>76014750</Cmf>
        <DealerNumber/>
        <DealershipName>Jet Ski of Miami</DealershipName>
    </Dealer>
    <Dealer>
        <Cmf>76066987</Cmf>
        <DealerNumber/>
        <DealershipName>BROWARD MOTORSPORTS - Davie</DealershipName>
    </Dealer>
</ArrayOfDealer>

我想将其解析为类似的东西

cmf      dealernumber    dealershipname
76066699                 BROWARD MOTORSPORTS - WPB
76014750                 Jet Ski of Miami
76066987                 BROWARD MOTORSPORTS - Davie

XML 来自我已存储为字符串的 api。

想法?

编辑:为了澄清,我知道结构将与上面类似,没有进一步的节点嵌套,但实际的标签名称可以非常。


像这样的东西会让你得到你需要的东西吗:

Func<string, string> csvFormat =
    t => String.Format("\"{0}\"", t.Replace("\"", "\"\""));

var xml = XDocument.Parse(/* xml text here */);

Func<XDocument, IEnumerable<string>> getFields =
    xd =>
        xd
            .Descendants("Dealer")
            .SelectMany(d => d.Elements())
            .Select(e => e.Name.ToString())
            .Distinct();

var headers =
    String.Join(",",
        getFields(xml)
            .Select(f => csvFormat(f)));

var query =
    from dealer in xml.Descendants("Dealer")
    select string.Join(",",
        getFields(xml)
            .Select(f => dealer.Elements(f).Any()
                ? dealer.Element(f).Value
                : "")
            .Select(x => csvFormat(x)));

var csv =
    String.Join(Environment.NewLine,
        new [] { headers }.Concat(query));

这仍然假设<ArrayOfDealer><Dealer>结构表示相同,但​​下面的字段可能会发生变化。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 C# 不使用 xslt 将 XML 转换为 CSV 的相关文章

  • 为多线程 UDP 客户端执行“close ()”时套接字描述符未释放

    我在下面编写了 UDP 客户端 它基本上生成一个单独的线程来接收数据报 但是数据报仅在主线程中发送 现在 在 Linux 发行版上实例化 udpClient 1 UDP 客户端后按 ctrl D 实现退出循环 围绕 getline 调用 并
  • Microsoft Graph API 授权错误:无效受众

    我知道这是一个很长的问题 但如果有人能与我分享他们的想法或经验 我真的很感激 因为我已经解决这个问题几天了 现在正在尝试很多事情 我有一个 ASP Net Core 3 1 Web API 应用程序和一个 ASP NET Core 3 1
  • Lambda、封闭变量、显示类、可序列化性和流行层

    我已经为 Compact Framework 实现了一个流行层 包括BinaryFormatter 类似序列化器 我希望能够在适当的情况下序列化编译器生成的类 这些类是由 lambda 和迭代器等产生的 这样如果 例如 lambda 及其封
  • 如何让我的方法等待所有线程完成?

    我有一个方法可以触发线程来完成一些工作 将有 2 个线程异步运行一段时间 当调用它们的回调方法时 回调会触发另一个线程 直到所有工作完成 如何让我的方法等待所有这些线程完成并被触发 如果这是 Net 4 0 您可以使用CountdownEv
  • F1 2019 UDP解码

    我目前正在为 F1 方向盘开发自己的显示器 F1 2019 由codemasters提供 通过UDP发送数据 该数据存储在字节数组中 我在解码返回的数组时遇到一些问题 问题是我得到了很多信息 但我不知道如何处理它们 我将向您介绍我所尝试过的
  • 将 MyGeneration 与 Fluent NHibernate 结合使用

    我在这里找到了一个使用 MyGeneration 生成 NHibernate 代码的绝佳模板 http vucetica blogspot com 2009 01 nhibernate template for my Generation
  • 正确别名向量

    我无法在其他地方找到答案 所以我想我只需要问这个 我正在尝试获取向量 其中存储 int 指针 的别名 如下所示 void conversion Engine ENGINES The Engine class has a vector of
  • 为什么 C++11/Boost `unordered_map` 在擦除时不重新散列?

    我想知道为什么 C 11 和 Boost 的 hashmap 在通过迭代擦除元素时不会调整大小 即使这在技术上不是内存泄漏 我认为这可能是应用程序中的一个严重问题 这对我来说是一个隐藏的问题 很难追踪它 并且它实际上可能会影响许多应用程序
  • 如何将 list 对象附加到另一个对象

    在 C 中 我有两个list
  • 以 ASCII 字符串形式获取 MemoryStream 内容的快速方法

    我在 MemoryStream 中有一个 JSON 字符串 我使用以下代码将其作为 ASCII 字符串获取 MemoryStream memstream new MemoryStream Write a JSON string to mem
  • boost::unordered_map 是...有序的吗?

    我有一个 boost unordered map 但它看起来是有序的 给我一种压倒性的 你做错了 的感觉 为什么输出是这样的 我希望底层的哈希算法能够随机化这个顺序 include
  • 提高 ASP.NET/C# 编译速度的最佳方法是什么?

    更新 请将您的答案集中在硬件解决方案上 您使用什么硬件 工具 插件来提高 ASP NET 编译和首次执行速度 我们正在寻找固态硬盘来加快速度 但现在价格确实很高 我现在有两个 RAID 0 的 7200 rpm 硬盘 但我对性能不再满意 所
  • C++ 中的静态虚函数

    我有一个基类和一个派生类 我想更改基函数 同时保持它们静态 因为它们应该作为静态传递给其他函数 我怎样才能做到这一点 ATL 框架通过将基类设为模板 然后让派生类将其类类型作为模板参数传递 从而绕过了无虚拟静态的限制 然后 基类可以在需要时
  • 将 size_t 变量添加到指针

    我想向指针添加 size t 类型 有些像这样 void function size t sizeA size t sizeB void pointer pointer malloc sizeA pointer pointer sizeB
  • 如何对具有无效值的属性使用 JSON.net 的默认值

    我正在使用 Newtonsoft JSON 库来反序列化来自 Web 服务的响应 问题是某些字段包含无效值 例如 一条记录上的一个字段包含一个 T 表示该字段应该是数字 我想做的是将无效字段的值设置为 null 或其他默认值 我的所有属性都
  • 验证仅适用于数组的第一项

    给定这个模型代码 Required Display Name Name public string Name get set 以下查看代码有效 Html LabelFor model gt model Name Html TextBoxFo
  • XSLT 是 Web 框架的好选择吗?

    我一直认为 XML 以及之前的 SGML 数据是魔鬼的格式 我是旧数据库和平面文件学校的 尽管如此 我们正在开发一款商用网络产品 其框架基于在链中翻译 转换 XML 数据 当我们面试职位以及与潜在客户交谈时 他们喜欢它将做什么的概念 但厌倦
  • 产量回报延迟迭代问题

    我知道yield return 利用了延迟加载 但我想知道我是否可能滥用迭代器或者很可能需要重构 我的递归迭代器方法返回给定的所有祖先PageNode包括pageNode itself public class PageNodeIterat
  • LINQ 中的左外连接

    下面的代码不断给我一个错误消息 你调用的对象是空的 var partsWithDefaults from partsList1 in p join partsList2 in d on new PartNo partsList1 PartN
  • 使用全局 Web API 过滤器属性进行 Unity 依赖注入

    参考这个CodePlex 统一文章 http unity codeplex com discussions 446780我能够使用 WebAPI 控制器获取过滤器属性 如下所示 MyFilterAttribute public class

随机推荐

  • IE7 与我的 jQuery 相关的问题 [点击并更改功能]

    我有以下代码片段 基本上我想做的是在第一次单击函数中循环遍历缓存的 JSON 数据并显示该 id 存在的任何值 在第二个更改函数中 每当其中一个元素更改值时 即从是到否 反之亦然 我都会捕获 这些元素都是通过我从 Web 服务接收到的 JS
  • 在 C# 中创建值列表的快速方法?

    我正在寻找一种在 C 中创建值列表的快速方法 在 Java 中 我经常使用下面的代码片段 List
  • 从控制台应用程序同步击键读取

    我想立即读取 Windows 和 Linux 下用 C 编写的控制台应用程序中的每一次击键 不幸的是 当按下 输入 返回 键时 函数 gets line 只返回一个值 我正在寻找一个在按下按键后立即返回的函数 目前我的代码看起来像这样 ch
  • 如何使用 Intel 语法内联汇编在 GCC 中设置变量?

    为什么这个代码没有设置temp到 1 我实际上该如何做到这一点 int temp asm intel syntax mov 0 eax mov eax 1 att syntax r 1 r temp eax printf d n temp
  • 对 xhtml5 感到困惑:不再有“”,现在强制使用“meta”?

    我已经是长期用户XHTML 1 0 Strict 我现在正尝试在我的新项目中切换到 XHTML5 我很困惑对于 HTML5 不再被认为是有效的http validator w3 org http validator w3 org 这是为什么
  • 我无法更新 Google App 脚本上的脚本

    我在公司使用Google App 更新脚本时经常遇到问题 当我更新我的脚本时 我在 Google 网站上的网页没有更新 而且很长一段时间 更新脚本时我必须创建一个新脚本 我可以解决这个问题吗 regards 有两种方法可以publish你的
  • 如何更轻松地在 Emacs 中的缓冲区之间切换?

    我最近开始使用 emacs 并且大部分时间我都很享受使用它 我唯一不喜欢的是在缓冲区之间切换 我经常打开一些缓冲区 并且我已经厌倦了使用C x b and C x C b 是否有任何软件包可以使缓冲区之间的切换变得更容易 我调查过emacs
  • 测试应用程序的可访问性(对讲)

    我正在使我的应用程序可访问性兼容 为此 通过在 xml 中提供 android contentDescription your string 来向可访问性框架提供正确的数据 我还看到了关于使应用程序可访问的 Android 开发人员指南 概
  • 沟通差距:用户与分析师-设计师

    通常的做法是使用案例研究 构建工作流和数据流等 但这并不一定会在用户 发起者和分析师 设计者之间创建共享词汇表 通常 其中一方都必须获得其他专业领域 内部 的术语和观点 这通常会导致误解和澄清会议 进入 RAD 技术 如进化原型 等 用户
  • 在Java中声明布尔变量的正确方法是什么?

    我刚刚开始学习Java 在我关注的在线课程中 我被要求尝试以下代码 String email1 email protected cdn cgi l email protection String email2 email protected
  • Sklearn LogisticRegressionCV 的类似数组的输入

    最初 我从a读取数据 csv文件 但在这里我从列表构建数据框 以便可以重现问题 目的是使用交叉验证来训练逻辑回归模型LogisticRegressionCV indeps M F M F M M F M M F F F F F M F F
  • 使用 Numpy for Python 创建 cx_Freeze exe

    我正在尝试使用 cx Freeze 创建一个基本的 exe 它适用于没有 numpy 的 py 程序 但我无法使用 numpy 正确制作一个程序 有想法该怎么解决这个吗 我需要在 setup py 中包含一些内容吗 当我去运行 exe 时
  • 更改传单归属控制位置

    我在我的应用程序中使用 WebView 来显示传单地图 在 HTML 文件中 我有以下制作人员和链接 L tileLayer https api tiles mapbox com v4 id z x y png access token x
  • 使用 LLVM 为整个源代码生成 CFG

    LLVM 社区的任何人都知道是否有一种方法可以使用以下方法为整个输入源代码生成 CFG opt dot cfg foo ll bc 由于此函数为每个函数生成 CFG 因此函数之间的连接将被忽略 看来旧的分析工具已经贬值了 我想知道你是否找到
  • 使用 highcharts 在堆栈标签中显示特定系列值

    这是我正在处理的内容 http jsfiddle net josip0423 prJjY 171 http jsfiddle net josip0423 prJjY 171 过去几个小时我一直在努力解决这个问题 但一无所获 我对 javas
  • C# 异步操作

    实际上我很难理解 BeginInvoke 和 EndInvoke 对 class AsynchronousDemo public delegate void DemoDelegate static void Main DemoDelegat
  • glGenerateMipmap 是否在 sRGB 纹理的线性空间中执行平均?

    OpenGL 3 3 规范似乎没有要求 mipmap 生成在线性空间中完成 我能找到的只有以下内容 派生的 mipmap 数组的内部格式都与 levelbase 数组和派生数组的维度如下 第 3 8 14 节中描述的要求 的内容 派生数组是
  • GPS 坐标(以度为单位)来计算距离

    在iPhone上 我以十进制度数获取用户的位置 例如 纬度39 470920和经度 0 373192 也就是A点 我需要用另一个 GPS 坐标 同样以十进制表示 B 点创建一条线 然后 计算从 A 到 B 的线与另一个点 C 之间的距离 垂
  • 在用 Kotlin 编写的 Android 库的公共 API 中处理 R8 + JvmStatic Annotation + Lambda

    首先请注意 我并不期待why do you want to obfuscate library评论 这是我要问的一个真正的问题 我在使用 Kotlin 编写的 Android 库处理 R8 混淆时遇到了问题 我有一个公共 API 方法 其注
  • 使用 C# 不使用 xslt 将 XML 转换为 CSV

    我一直在网上搜索 我假设有人必须在我之前需要这个并且做得更好 以获取 xml 到 csv 转换器 我有一个非常标准的 xml 如下