Вам нужно кодировать его, чтобы иметь дело с пространствами имен.Одним из способов является использование операторов Imports, таких как:
Imports <xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
Imports <xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
Imports <xmlns:xsd="http://www.w3.org/2001/XMLSchema">
Imports <xmlns="http://integration.univera.com.tr">
Module Module1
Sub Main()
Dim x As XElement = <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<IntegrationGetEntitySetWithPacketLoginResponse xmlns="http://integration.univera.com.tr">
<IntegrationGetEntitySetWithPacketLoginResult>
<ResultString>OK</ResultString>
<IsSuccess>true</IsSuccess>
<ResultEntitySet>
<GorevSonucBilgiler/>
<DistUnvan/>
<PaketAdi/>
<Warnings/>
<PaketTanimlar>
<clsPaketTanim>
<Kod xsi:nil="true"/>
<Tabloadi>CUSTOMVIEW_ENTVIEWFATURAGENERIC_OZGUN</Tabloadi>
<Viewadi>CUSTOMVIEW_ENTVIEWFATURAGENERIC_OZGUN</Viewadi>
<Yon xsi:nil="true"/>
<Kriter>"(LNGDISTKOD = 12) AND BYTTUR IN(0,1) AND (LNGYIL = 2018) AND (BYTDURUM = 0)"</Kriter>
<Durum xsi:nil="true"/>
</clsPaketTanim>
</PaketTanimlar>
<SatirBazliTransaction>false</SatirBazliTransaction>
<LogKategori>0</LogKategori>
<IntegrationGorevSonucTip>0</IntegrationGorevSonucTip>
<errorLoglist/>
<SCCall>false</SCCall>
<ReturnLoglist>false</ReturnLoglist>
<StokSil>false</StokSil>
<CustomData>
<ArrayOfClsDictionaryOfStringObject>
<clsDictionaryOfStringObject>
<Key>LNGYIL</Key>
<Value xsi:type="xsd:int">2018</Value>
</clsDictionaryOfStringObject>
<clsDictionaryOfStringObject>
<Key>LNGDISTKOD</Key>
<Value xsi:type="xsd:int">12</Value>
</clsDictionaryOfStringObject>
<clsDictionaryOfStringObject>
<Key>TXTDISTKOD</Key>
<Value xsi:type="xsd:string">SH012</Value>
</clsDictionaryOfStringObject>
<clsDictionaryOfStringObject>
<Key>TXTSTKOD</Key>
<Value xsi:type="xsd:string">SH010</Value>
</clsDictionaryOfStringObject>
</ArrayOfClsDictionaryOfStringObject>
</CustomData>
</ResultEntitySet>
</IntegrationGetEntitySetWithPacketLoginResult>
</IntegrationGetEntitySetWithPacketLoginResponse>
</soap:Body>
</soap:Envelope>
Dim doc = New XDocument(x)
Dim q = doc.<soap:Envelope>.<soap:Body>.<IntegrationGetEntitySetWithPacketLoginResponse>.<IntegrationGetEntitySetWithPacketLoginResult>.<ResultEntitySet>.<CustomData>.<ArrayOfClsDictionaryOfStringObject>.<clsDictionaryOfStringObject>
Dim lngyil = (
From v In q
Where v.<Key>.Value = "LNGYIL"
Select v.<Value>.Value
).Single()
Console.WriteLine(lngyil)
Console.ReadLine()
End Sub
End Module
Выходы:
2018
PS У меня подозрение что xmlns="http://integration.univera.com.tr"
недопустимо, и должно быть что-то вроде xmlns:univera="http://integration.univera.com.tr"
.Это изменение делает возможным следующее ...
Второй параметр
Вместо использования операторов Imports вы можете использовать XmlNamespaceManager , например так:
Imports System.Xml
Imports System.Xml.XPath
Module Module1
Sub Main()
Dim x As XElement = <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<IntegrationGetEntitySetWithPacketLoginResponse xmlns:univera="http://integration.univera.com.tr">
<IntegrationGetEntitySetWithPacketLoginResult>
<ResultString>OK</ResultString>
<IsSuccess>true</IsSuccess>
<ResultEntitySet>
<GorevSonucBilgiler/>
<DistUnvan/>
<PaketAdi/>
<Warnings/>
<PaketTanimlar>
<clsPaketTanim>
<Kod xsi:nil="true"/>
<Tabloadi>CUSTOMVIEW_ENTVIEWFATURAGENERIC_OZGUN</Tabloadi>
<Viewadi>CUSTOMVIEW_ENTVIEWFATURAGENERIC_OZGUN</Viewadi>
<Yon xsi:nil="true"/>
<Kriter>"(LNGDISTKOD = 12) AND BYTTUR IN(0,1) AND (LNGYIL = 2018) AND (BYTDURUM = 0)"</Kriter>
<Durum xsi:nil="true"/>
</clsPaketTanim>
</PaketTanimlar>
<SatirBazliTransaction>false</SatirBazliTransaction>
<LogKategori>0</LogKategori>
<IntegrationGorevSonucTip>0</IntegrationGorevSonucTip>
<errorLoglist/>
<SCCall>false</SCCall>
<ReturnLoglist>false</ReturnLoglist>
<StokSil>false</StokSil>
<CustomData>
<ArrayOfClsDictionaryOfStringObject>
<clsDictionaryOfStringObject>
<Key>LNGYIL</Key>
<Value xsi:type="xsd:int">2018</Value>
</clsDictionaryOfStringObject>
<clsDictionaryOfStringObject>
<Key>LNGDISTKOD</Key>
<Value xsi:type="xsd:int">12</Value>
</clsDictionaryOfStringObject>
<clsDictionaryOfStringObject>
<Key>TXTDISTKOD</Key>
<Value xsi:type="xsd:string">SH012</Value>
</clsDictionaryOfStringObject>
<clsDictionaryOfStringObject>
<Key>TXTSTKOD</Key>
<Value xsi:type="xsd:string">SH010</Value>
</clsDictionaryOfStringObject>
</ArrayOfClsDictionaryOfStringObject>
</CustomData>
</ResultEntitySet>
</IntegrationGetEntitySetWithPacketLoginResult>
</IntegrationGetEntitySetWithPacketLoginResponse>
</soap:Body>
</soap:Envelope>
Dim doc = New XDocument(x)
Dim nt As NameTable = New NameTable()
Dim nsmgr As XmlNamespaceManager = New XmlNamespaceManager(nt)
nsmgr.AddNamespace("soap", "http://schemas.xmlsoap.org/soap/envelope/")
nsmgr.AddNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance")
nsmgr.AddNamespace("xsd", "http://www.w3.org/2001/XMLSchema")
nsmgr.AddNamespace("univera", "http://integration.univera.com.tr")
Dim a = doc.XPathSelectElements("/soap:Envelope/soap:Body/IntegrationGetEntitySetWithPacketLoginResponse/IntegrationGetEntitySetWithPacketLoginResult/ResultEntitySet/CustomData/ArrayOfClsDictionaryOfStringObject/clsDictionaryOfStringObject", nsmgr)
Dim lngyil2 = (
From v In a
Where v.XPathSelectElement("Key").Value = "LNGYIL"
Select v.XPathSelectElement("Value").Value
).Single()
Console.WriteLine(lngyil2)
Console.ReadLine()
End Sub
End Module
Дальнейшая работа над запросом XPath позволит вам получить значение непосредственно без цикла после него.
Refs: