这个 XML 有什么问题,阻止了 linq 工作


    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......

最新更新