C# 是否将XML保存到列表或数组中?

C# 是否将XML保存到列表或数组中?,c#,.net,xml,linq,c#-4.0,C#,.net,Xml,Linq,C# 4.0,我们有一个600K行的XML文件,其中包含大量数据。在所有数据中,我需要读取的是节点,而知道我要读取哪个的方法是因为它内部有一个元素,文本以“ValueAssigned=1,Function=1,Id=”开头 无论如何,这都不是一个完整的XML字符串,但这只是一个示例 最终结果是将每个Id与其在中的值相匹配 我曾想过这样的事情,但我还没有尝试过: string textToFind = "ValueAssigned=1, Function=1, Id="; IEnumerable<XEle

我们有一个600K行的XML文件,其中包含大量数据。在所有数据中,我需要读取的是节点
,而知道我要读取哪个
的方法是因为它内部有一个元素
,文本以“ValueAssigned=1,Function=1,Id=”开头

无论如何,这都不是一个完整的XML字符串,但这只是一个示例

最终结果是将每个
Id
与其在
中的值相匹配

我曾想过这样的事情,但我还没有尝试过:

string textToFind = "ValueAssigned=1, Function=1, Id=";
IEnumerable<XElement> query1 = doc.Descendants("mod").Where(c => c.Value == TextToFind).Ancestors("mv");
string textToFind=“ValueAssigned=1,Function=1,Id=”;
IEnumerable query1=doc.substands(“mod”)。其中(c=>c.Value==TextToFind.constances(“mv”);

谢谢。

您可以将xml转换为
字典

Dictionary dict=
XDocument.Load(文件名)
.后代(“mv”)
.ToDictionary(x=>Regex.Match((字符串)x.Element(“mod”),@“Id=(\d+))
.Groups[1]。值,
x=>x.Elements(“t”).Select(t=>(int)t.ToList();
完整的工作代码:

string xml = @"
<root>
    <mv>
        <mod>ValueAssigned=1, Function=1, Id=1</mod>
        <t>123</t>
        <t>20</t>
        <t>10</t>
        <t>40</t>
    </mv>
    <mv>
        <mod>ValueAssigned=1, Function=1, Id=2</mod>
        <t>300</t>
        <t>21</t>
        <t>56</t>
        <t>30</t>
    </mv>
</root>
";

Dictionary<string,List<int>> dict = 
                XDocument.Parse(xml)
                .Descendants("mv")
                .ToDictionary(x => Regex.Match((string)x.Element("mod"), @"Id=(\d+)").Groups[1].Value,
                              x=>x.Elements("t").Select(t=>(int)t).ToList());

foreach(var kv in dict)
{
    Console.WriteLine("ID: {0}  Ts: {1}", kv.Key, string.Join(",", kv.Value));
}
stringxml=@”
ValueAssigned=1,Function=1,Id=1
123
20
10
40
ValueAssigned=1,Function=1,Id=2
300
21
56
30
";
字典dict=
解析(xml)
.后代(“mv”)
.ToDictionary(x=>Regex.Match((字符串)x.Element(“mod”),@“Id=(\d+))。组[1]。值,
x=>x.Elements(“t”).Select(t=>(int)t.ToList();
foreach(以dict为单位的var kv)
{
WriteLine(“ID:{0}Ts:{1}”,kv.Key,string.Join(“,”,kv.Value));
}

@WinterMute该xml文件的设计者需要了解xmlI。我曾想过类似的事情,但我还没有尝试过。试试看,如果不行的话,我们可以帮忙。你比我强。您可能需要在
之后添加
。其中(x=>x.Element(“mod”)!=null&&x.Element(“mod”).Value.StartsWith(“ValueAssigned=1,Function=1”)
。谢谢。不幸的是,我得到“根级别的数据无效。第1行,位置1。”。显然,这不是一个格式良好的XML文件,我无法在XML编辑器的浏览器中正确打开它。
string textToFind = "ValueAssigned=1, Function=1, Id=";
IEnumerable<XElement> query1 = doc.Descendants("mod").Where(c => c.Value == TextToFind).Ancestors("mv");
Dictionary<string,List<int>> dict = 
                XDocument.Load(filename)
                .Descendants("mv")
                .ToDictionary(x => Regex.Match((string)x.Element("mod"), @"Id=(\d+)")
                                        .Groups[1].Value,
                              x=>x.Elements("t").Select(t=>(int)t).ToList());
string xml = @"
<root>
    <mv>
        <mod>ValueAssigned=1, Function=1, Id=1</mod>
        <t>123</t>
        <t>20</t>
        <t>10</t>
        <t>40</t>
    </mv>
    <mv>
        <mod>ValueAssigned=1, Function=1, Id=2</mod>
        <t>300</t>
        <t>21</t>
        <t>56</t>
        <t>30</t>
    </mv>
</root>
";

Dictionary<string,List<int>> dict = 
                XDocument.Parse(xml)
                .Descendants("mv")
                .ToDictionary(x => Regex.Match((string)x.Element("mod"), @"Id=(\d+)").Groups[1].Value,
                              x=>x.Elements("t").Select(t=>(int)t).ToList());

foreach(var kv in dict)
{
    Console.WriteLine("ID: {0}  Ts: {1}", kv.Key, string.Join(",", kv.Value));
}