C# Linq2XML可以';找不到具有命名空间的元素

C# Linq2XML可以';找不到具有命名空间的元素,c#,xml,C#,Xml,我有这个XML <SENDERS VERSION="V3.0.4" xsi:noNamespaceSchemaLocation="SENDERS.xd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <SECTION> </SECTION> </SENDERS> 通常我是这样做的,但是这个时间段总是空的。我做错什么了

我有这个XML

<SENDERS VERSION="V3.0.4" xsi:noNamespaceSchemaLocation="SENDERS.xd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <SECTION>
  </SECTION>
</SENDERS>

通常我是这样做的,但是这个时间段总是空的。我做错什么了吗?

我想你记错了。实际上,
元素没有任何显式的名称空间前缀,因此它只能有一个默认名称空间(声明时没有前缀)

因为您的XML没有声明任何默认名称空间(例如:
xmlns=…
)。因此,您的
没有名称空间,工作代码应如下所示:

var section = xdoc.Root.Element("SECTION");

另一个问题是您需要使用
XDocument.Root.Element
而不是
XDocument.Element

谢谢您,这很有效!但现在如果我想访问节中的元素,我该怎么做呢?如果我使用元素(名称),它将返回null。@FenrisL已经回答了多次,谷歌搜索应该也会给你一些答案,请参见此处-另一个使用XPath Right(+1)的选项,但我删除了关于
xsi:SECTION
的部分,这被误认为是
xsi的
prefixhttp://www.w3.org/2001/XMLSchema-instance
决不会以这种方式用作
部分的前缀。有关详细信息,请参阅。@kjhughes您的意思是说
xsi
不应该用作任意xml元素的前缀吗?我认为这个问题与任何标准(例如:XSD规范)无关,它更多地与元素的前缀有关,就像OP的问题一样,他甚至不知道
部分
元素实际上根本没有前缀。我认为,与其删除该部分,还不如添加关于特殊
xsi
前缀的附加说明。是的,以这种方式使用
xsi
是可能的,但这将是非常规和误导性的。你的回答已经解决了OP的问题。像
部分那样使用
xsi
,或者解释为什么OP不应该这样做,这与OP的问题完全无关,同样,您已经很好地解释了这一点。
var section = xdoc.Root.Element("SECTION");