我正在尝试学习LINQ并且有一个关于使用VB查询XML的问题.
我的XML:
<Procedure-Text>
<A ID="marker1"></A>Do This Procedure
</Procedure-Text>
<Procedure-Text>
<A ID="marker2"></A>Do That Procedure
</Procedure-Text>
Run Code Online (Sandbox Code Playgroud)
如何指定查询以仅获取具有ID属性marker2的过程文本?换句话说,我想要一个结果字符串,表示执行该程序.
谢谢
使用VB XML文字:
Dim marker2 = From x In data...<Procedure-Text> _
Where x.<A>.@ID = "marker2" _
Select x
Run Code Online (Sandbox Code Playgroud)
三点式语法生成xml元素的"所有后代",data...<Procedure-Test>即将生成<Procedure-Test>内部标记列表data
XML文字上的点语法意味着"第一个后代",因此x.<A>将产生<A>内部x 的第一个出现.其中x现在是实例<Procedure-Test>
现在您拥有了所需的<A>元素,将其id与字符串进行比较对于@attr属性选择器来说是微不足道的.<A>.@ID = "marker2"将评估标签True的ID属性<A>是否等于"marker2"
所以x.<A>.@ID意味着" <A>x中第一个标签的ID属性"
你想要<Procedure-Text>元素,所以你指定Select x
完整示例:
Sub Main()
Dim data = <doc>
<Procedure-Text>
<A ID="marker1"></A>Do This Procedure
</Procedure-Text>
<Procedure-Text>
<A ID="marker2"></A>Do That Procedure
</Procedure-Text>
</doc>
Dim marker2 = From x In data...<Procedure-Text> _
Where x.<A>.@ID = "marker2" _
Select x
' prints the second procedure-text element
Console.WriteLine(marker2.FirstOrDefault().ToString())
Console.ReadKey()
End Sub
Run Code Online (Sandbox Code Playgroud)