我有一个如下的 xml 文件,我需要提取值并将它们放入多维数组中。 这个想法是,当每个根元素<Etiquette>有多个标签<string> ,我需要用标签<string>每个不同值重复相同的其他值

   <?xml version="1.0" encoding="utf-8"?>
   <ArrayOfEtiquette xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <Etiquette>
     <BgColor>#8075D1C5</BgColor>
     <BorderColor>#FF4E5B6F</BorderColor>
     <AssociatedAffaireId>
       <string>d4689f33-5600-47fe-883d-efcbf5e469c2</string>
       <string>1bae35dd-d501-4d87-bdd4-147fc0ba29d2</string>
     </AssociatedAffaireId>
     <Label>Ouverte</Label>
    </Etiquette>
    <Etiquette>
     <BgColor>#80949CA8</BgColor>
     <BorderColor>#FF155E70</BorderColor>
     <AssociatedAffaireId>
       <string>203cc4a8-8c24-4a2d-837c-29c7c1f73007</string>
     </AssociatedAffaireId>
     <Label>Fermée</Label>
    </Etiquette>
   </ArrayOfEtiquette>

想要的结果:

{"#8075D1C5","#FF4E5B6F","d4689f33-5600-47fe-883d-efcbf5e469c2","Ouverte"}
{"#8075D1C5","#FF4E5B6F","1bae35dd-d501-4d87-bdd4-147fc0ba29d2","Ouverte"}
{"#80949CA8","#FF155E70","203cc4a8-8c24-4a2d-837c-29c7c1f73007","Fermée"}

问候,

#1楼 票数:1

使用 Xml Linq :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication157
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);
            var results = doc.Descendants("Etiquette")
                .SelectMany(x => x.Descendants("string")
                    .Select(y => new { BgColor = (string)x.Element("BgColor"), BorderColor = (string)x.Element("BorderColor"), UID = (string)y }))
                .ToList();
        }
    }
}

我只想要一个数组而不是匿名类型使用:

new string[] { (string)x.Element("BgColor"), (string)x.Element("BorderColor"), (string)y }

#2楼 票数:0

你只需要先在Etiquette迭代,然后在AssociatedAffaireId上再次迭代

每次都可以插入数组或列表中(为简单起见,我将使用列表)

    XDocument xdoc = XDocument.Load("pathToXml.xml");
    // iterate all Etiquette elements
    foreach (var etiquette in xdoc.Root.Elements("Etiquette"))
    {
        // store common values
        string bgColor = etiquette.Element("BgColor").Value;
        string borderColor = etiquette.Element("BorderColor").Value;
        string label = etiquette.Element("Label").Value;
        // iterate all AssociatedAffaireId.string elements and add to list
        var associatedAffaireIdEl = etiquette.Element("AssociatedAffaireId");
        foreach (var associatedAffaireId in associatedAffaireIdEl.Elements("string"))
        {
            string aaid = associatedAffaireId.Value;
            listOfArray.Add(new string[]{bgColor, borderColor, aaid, label});
        }
    }

我希望这会有所帮助。

抱歉,我发现了一些错误。 在这里查看我的小提琴。

#3楼 票数:0 已采纳

您可以尝试使用XDocument

XDocument xdoc = XDocument.Load("XMLFile7.xml");
var mdAarray = xdoc.Descendants("Etiquette")
                   .SelectMany(etiquette => 
                               etiquette.Descendants("string")
                                        .Select(associatedaffaire => new string[] {
                                          etiquette.Element("BgColor").Value.ToString(),
                                          etiquette.Element("BorderColor").Value.ToString(),
                                          associatedaffaire.Value.ToString(),
                                          etiquette.Element("Label").Value.ToString() }))
                    .ToArray();

Console.WriteLine(JsonConvert.SerializeObject(mdAarray));

输出

[
 ["#8075D1C5","#FF4E5B6F","d4689f33-5600-47fe-883d-efcbf5e469c2","Ouverte"],
 ["#8075D1C5","#FF4E5B6F","1bae35dd-d501-4d87-bdd4-147fc0ba29d2","Ouverte"],
 ["#80949CA8","#FF155E70","203cc4a8-8c24-4a2d-837c-29c7c1f73007","Fermée"]
]

  ask by Amd Whb translate from so

未解决问题?本站智能推荐:

1回复

C#中的索引通用(多类型,单值)多维数组

任务 : 从二进制文件中读取数组(跟踪数据),其中数组的数量,长度和数据类型在文件的开头(标题)定义。 条件 : 每个数组的数据类型可能不同,但是一个数组具有相同的类型。 每个数组的长度相同,但是数组的数量可以不同。 数据类型定义为数字 用于代码实现的Inform
4回复

在C#中搜索多维数组

我有多维数组 设伪数据为: 现在,我想在数组中搜索251、142对。 除了线性搜索,什么是最好的方法?
2回复

熄灯C#多维数组

我们有熄灯游戏要编程 我现在遇到的问题是它说它超出了Array范围(索引),但我不知道为什么。 也许你可以帮助我。
4回复

如何将单维数组转换为多维数组?(C#)

我必须使用一个接受double [,]的方法,但我只有一个double []。 我怎么转换它? 目前解决方案:
1回复

如何在C#中创建多维数组?

我有一本字典,我想通过它通过c#创建多维数组。 我需要在foreach外观内添加代码,以便它可以创建类似以下内容的代码: 请注意,Item1,Item2来自str1,而1,2来自int1。 我不确定如何迭代来填充多维对象数组。
2回复

如何生成C#中的多维数组的源代码

例如,我们有一个double[,] d = new double[1,2];维数组double[,] d = new double[1,2]; d.GetType()返回{Name = "Double[,]" FullName = "System.Double[,]"} d[0,0]被编
2回复

将数据表转换为多维数组C#

我正在尝试将DataTable的行转换为多维数组: 任何人都可以帮忙。
2回复

C#中的多维数组访问性能

我已经看到C#“被优化”用于访问1D数组(不调用访问元素的函数),但是对于multidim-arrays函数,每次调用GetValue。 为什么不在每次执行“正常”访问(指针移位+检查)时调用此函数,或者至少此函数不会被展平? 我找不到合乎逻辑的理由。 (多维数组的性能不是很好)