LINQ到XML和名称空间的问题

LINQ到XML和名称空间的问题,xml,linq,Xml,Linq,我在使用第三方XML字符串时遇到问题,该字符串包含具有LINQ to XML的命名空间 在下面的代码中,一切工作都可以找到。我可以选择xElement(xEl1)并更新其值 'Example Without Namespace Dim XmlWithOutNs = _ <?xml version="1.0"?> <RATABASECALC> <RATEREQUEST> <ANCHOR

我在使用第三方XML字符串时遇到问题,该字符串包含具有LINQ to XML的命名空间

在下面的代码中,一切工作都可以找到。我可以选择xElement(xEl1)并更新其值

    'Example Without Namespace
    Dim XmlWithOutNs = _
    <?xml version="1.0"?>
    <RATABASECALC>
        <RATEREQUEST>
            <ANCHOR>
                <DATABASENAME>DatabaseName</DATABASENAME>
                <DATABASEPW>DatabasePw</DATABASEPW>
            </ANCHOR>
        </RATEREQUEST>
    </RATABASECALC>

    Dim xEl1 = XmlWithOutNs...<DATABASEPW>.FirstOrDefault
    If xEl1 IsNot Nothing Then
        xEl1.Value = "test"
    End If
不带命名空间的示例 Dim XmlWithOutNs=_ 数据库名 数据库 Dim xEl1=XmlWithOutNs….FirstOrDefault 如果xEl1不是什么,那么 xEl1.Value=“测试” 如果结束 但是,在下面的代码中,xElement(xEl2)不返回任何内容。唯一的区别是名称空间(xmlns=”http://www.cgi.com/Ratabase)

”带有命名空间的示例
Dim XmlWithNs=_
数据库名
数据库
Dim xEl2=XmlWithNs…FirstOrDefault
如果xEl2不是什么,那么
xEl2.Value=“测试”
如果结束
因此,我的问题是: 1.为什么会发生这种情况?
2.如何解决这个问题?

这不等于(用C#术语)编译成:

其中,要在正确的名称空间中获取“DATABASEPW”,您需要以下等效项:

XNamespace ns = "http://www.cgi.com/Ratabase";
var el2 = XmlWithNs.Descendants(ns + "DATABASEPW").FirstOrDefault();
翻译成VB,你应该设置吗

Reflector向我保证(但不要引用我的话!)这类似于:

Dim ns As XNamespace = "http://www.cgi.com/Ratabase"
Dim el2 As XElement = XmlWithNs.Descendants(ns + "DATABASEPW").FirstOrDefault

这是VB代码,如果你介意的话:Dim ns As XNamespace=”“Dim xEl2=XmlWithNs.subjections(ns+“DATABASEPW”)。FirstOrDefaultAh,那更漂亮。我上一次使用VB是在VB6天,我已经生锈了;-p
XNamespace ns = "http://www.cgi.com/Ratabase";
var el2 = XmlWithNs.Descendants(ns + "DATABASEPW").FirstOrDefault();
Dim ns As XNamespace = "http://www.cgi.com/Ratabase"
Dim el2 As XElement = XmlWithNs.Descendants(ns + "DATABASEPW").FirstOrDefault