将XML转换为VB.NET字典
我试图使用LINQ将XML中的子级值放入字典集合中。我已经用列表和自定义集合完成了这项工作,它们遵循与XML相同的结构,但无法搜索特定的值。如果我知道parentName、childName和subChildName,我希望能够找到subChildProperty1.value和subChildProperty2.value,而无需像列表一样遍历整个集合和每个后续子集合。这可能不是最好的实现,我愿意接受建议,但我仍然想弄清楚如何使这项工作。这将允许我有一个字典项:将XML转换为VB.NET字典,xml,vb.net,linq,dictionary,linq-to-xml,Xml,Vb.net,Linq,Dictionary,Linq To Xml,我试图使用LINQ将XML中的子级值放入字典集合中。我已经用列表和自定义集合完成了这项工作,它们遵循与XML相同的结构,但无法搜索特定的值。如果我知道parentName、childName和subChildName,我希望能够找到subChildProperty1.value和subChildProperty2.value,而无需像列表一样遍历整个集合和每个后续子集合。这可能不是最好的实现,我愿意接受建议,但我仍然想弄清楚如何使这项工作。这将允许我有一个字典项: key = "parentNa
key = "parentNameValue1.childNameValue1.subchildNameValue1.subChildProperty1"
value = 0
我可以将字符串连接起来形成一个特定的键,然后搜索该键以返回一个值
XML:
parentNameValue1
childNameValue1
子儿童名称值1
0
5.
子儿童名称2
0
10
这个问题有点类似于,但我无法让代码在VB中为我的应用程序工作
我是SO(和VB)的新手,如果我的礼仪不正确,我深表歉意。有了VB.NET强大的XML支持,这很容易做到:
Imports System.Xml.Linq
...
副标题()
Dim xml=_
parentNameValue1
childNameValue1
子儿童名称值1
0
5.
子儿童名称2
0
10
'或者,从文件加载XML
'Dim xml=XDocument.Load(文件名)
Dim dict作为新字典(字符串、整数)
'提取属性
对于xml中的每个父级。
Dim parentName=parent..Value
对于父级中的每个子级。
Dim childName=child..Value
针对子系统中的每个子系统。
Dim subchildName=subchild..Value
对于subchild.Elements.中的每个道具,其中(函数(e)e.名称“subchildName”)
dict.Add(String.Format(“{0}.{1}.{2}.{3}”),parentName,childName,subchildName,prop.Name)_
整数解析(属性值))
下一个
下一个
下一个
下一个
'打印这些值,以表明我们做得很好
对于dict中的每千伏
Console.WriteLine(“{0}:{1}”,kv.Key,kv.Value)
下一个
Console.ReadLine()
端接头
(很明显,代码假定选项Strict On和Option推断On。)谢谢!我看到“提取属性”部分中的代码使用LINQ,但我从未见过LINQ在查询方式之外使用。这项技术的名称是什么?@user1424311:语法
xml.
被调用。list.Where(函数(x)…
只是从列表中的x写入的另一种方式,其中…
(两者都属于LINQ to对象)。前者直接使用LINQ的方法(例如),而后者使用。XDocument.Load
不产生值。@Urbycoz:当然产生了:看啊,我明白了。我需要在顶部显示“Imports System.Xml.Linq”(我在上面添加了它)。我使用的System.Xml.XmlNode.XDocument,其“load”函数不返回值。
<root>
<parent>
<parentName>parentNameValue1</parentName>
<child>
<childName>childNameValue1</childName>
<subchild>
<subchildName>subchildNameValue1</subchildName>
<subChildProperty1>0</subChildProperty1>
<subChildProperty2>5</subChildProperty2>
</subchild>
<subchild>
<subchildName>subchildNameValue2</subchildName>
<subChildProperty1>0</subChildProperty1>
<subChildProperty2>10</subChildProperty2>
</subchild>
</child>
</parent>
<root>