Dim root As XElement = XElement.Load(xmlFile)
Dim stuff =
From item In root.Elements("abc") Select item
Debug.Print(stuff.Count)
XML的内容是:
<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook
xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40">
<abc xmlns="foo">1</abc>
<abc xmlns="foo">2</abc>
<abc xmlns="foo">3</abc>
</Workbook>
如果我删除工作簿标签的开头 xmlns="urn:schemas-microsoft-com:office:spreadsheet",我会得到 3 的正确结果
ETA 如果我嵌入了另一个命名空间,在本例中为"foo",我该怎么办
您正在尝试查找名称abc
没有任何命名空间的元素。父元素的xmlns=...
部分设置后代元素的默认命名空间。
你需要:
Dim ns As XNamespace = "urn:schemas-microsoft-com:office:spreadsheet"
...
Dim stuff = root.Elements(ns + "abc")
请注意,在这里使用查询表达式是没有意义的 - 如果您只是在做From x in y Select x
,您可以改用y
......