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

时间:2012-08-16 11:40:55

标签: 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”

1 个答案:

答案 0 :(得分:2)

您正在尝试查找名称为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代替......