C# 是否将XML保存到列表或数组中?
我们有一个600K行的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
,而知道我要读取哪个
的方法是因为它内部有一个元素
,文本以“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));
}