Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将XML转换为VB.NET字典_Xml_Vb.net_Linq_Dictionary_Linq To Xml - Fatal编程技术网

将XML转换为VB.NET字典

将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

我试图使用LINQ将XML中的子级值放入字典集合中。我已经用列表和自定义集合完成了这项工作,它们遵循与XML相同的结构,但无法搜索特定的值。如果我知道parentName、childName和subChildName,我希望能够找到subChildProperty1.value和subChildProperty2.value,而无需像列表一样遍历整个集合和每个后续子集合。这可能不是最好的实现,我愿意接受建议,但我仍然想弄清楚如何使这项工作。这将允许我有一个字典项:

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>