【发布时间】:2018-01-30 10:20:09
【问题描述】:
示例 XML:
<?xml version="1.0" encoding="utf-8"?>
<customers xmlns="http://example.com/ns/" si="0" records="2">
<customer id="123456789">
<dob>2017-12-10T16:22:27.033Z</dob>
<location>
<number>444555666777</number>
</location>
<link rel="self" href="http://example.com" />
</customer>
<customer id="987654321">
<dob>2017-12-11T17:00:00.033Z</dob>
<location>
<number>555666999888</number>
</location>
<link rel="self" href="http://example.com" />
</customer>
<link rel="self" href="http://example.com" />
</customers>
我设法使用
查询文件Dim X As XElement = Xelement.Load("C:\XMLFile1.xml")
Dim Customers As IEnumerable(Of XElement) = Xelement.Elements()
' Read the entire XML
For Each c In Customers
Console.WriteLine(c)
Next
目标是获取所有数字值(在位置下),但我想更进一步,看看我是否可以在一行中获取此元素,而不是每个循环都有一个(不确定这是否可能在要么?)。所以我把代码改成了
Dim xd As XDocument = XDocument.Load("C:\XMLFile1.xml")
Dim xe As XElement = Xd.Root
Dim nums As IEnumerable(Of XElement) = xe.Descendants.Where(Function(x) x.Element("number").Value)
'Dim nums As IEnumerable(Of XElement) = xe.Descendants.Where(Function(x) x.Element("location").Element("number").Value)
这会以 null/nothing 的形式返回。我尝试了不同的变体,将元素与后代混合并添加多个选择,但我认为我需要一个工作示例来真正了解发生了什么以及我在哪里犯了错误。在网上看到示例并没有真正帮助,因为我认为我最终让自己感到困惑。
我读了几篇文章,但有些文章指向添加命名空间,但我真的不想走这条路,直到我了解发生了什么以及我是否真的需要它?
【问题讨论】:
-
这是
vb,而不是c#。请不要添加与您的问题无关的标签。 -
是的,我知道,但我同时使用 C# 和 VB .Net,虽然语法有相似之处,但我确信如果 C# 代码作为答案发布,我可以轻松地将其转换为 VB.Net
标签: xml vb.net linq-to-xml