【问题标题】:Load 1D array from xml with linq使用 linq 从 xml 加载一维数组
【发布时间】:2014-04-15 12:44:36
【问题描述】:

我已经搜索了一下,但没有找到任何我认为适合答案的东西,我正在使用 XDocument 加载我的 xml,但我在将其转换为数组时遇到了一些麻烦

<?xml version="1.0" encoding="UTF-8"?>
<document>
  <sNone>
    <October>3.21</October>
    <November>-5.41</November>
    <December>-15.81</December>
    <January>-21.69</January>
    <February>-21.70</February>
    <March>-12.60</March>
    <April>-6.41</April>
    <May>-0.06</May>
    <June>5.42</June>
    <July>13.32</July>
    <August>14.12</August>
    <September>7.55</September>
  </sNone>

  <sLichen>
    <October>1.99</October>
    ...
</sLichen>
</document>

我正在像这样加载我的 XML

XDocument doc = XDocument.Parse();

但我对如何返回一维数组感到困惑,因为我有多个后代。

编辑

我的目标是得到一个这样的数组

{3.21, -5.41, -15.81, -21.69, -21.70, -12.60, -6.41, -0.06, 5.42, 13.32, 14.12, 7.55}

【问题讨论】:

  • 嗯,是的。如果您真的需要将其展平为一维数组或列表,那么它的外观几乎取决于您。将其反序列化为自定义对象会更容易
  • 什么的一维数组? sNone 中的元素没有相同的名称,它应该映射到一个类吗? sLichen 怎么办?您需要提供更多信息以便我们为您提供帮助。
  • 但是我一次只需要加载一个后代,这就是为什么我很困惑
  • @SimonBelanger 我不明白你在问什么,我有一个 xml 文件,里面填满了不同名称的后代,所以我想我可以做一些事情 doc.Root.Elements("sNone").Select(...) 但我不知道该选择什么...
  • 您可能可以在“sNone”节点上使用 .Elements() 或 .Descendants() 来实现这一点,然后应用 .Select() 将其映射到数组上?

标签: c# xml arrays linq


【解决方案1】:

这应该可以解决问题:

var doc = "<?xml version=\"1.0\" encoding=\"UTF-8\"?....";
XDocument xdoc = XDocument.Parse(doc);
var items = xdoc.Root.Elements("sNone").Descendants().Select(d => d.Value).ToArray();
Console.WriteLine(items);

或者如果你想要小数:

var items2 = xdoc.Root.Elements("sNone").Descendants().Select(d => decimal.Parse(d.Value)).ToArray();

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多