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