Преобразование linq-to-xml запроса из vb в C#
Не могли бы вы помочь
Dim ScriptDOC As XDocument
ScriptDOC = XDocument.Parse(e.Result)
Dim Result = From ele In XElement.Parse(ScriptDOC.ToString).Elements("HANDERDETAILS")
If IsNothing(Result.Descendants("RESULT")) = False Then status = Result.Descendants("RESULT").Value
If LCase(status) = "ok" Then
If IsNothing(Result.Descendants("BRANCHID")) = False Then BranchID = Result.Descendants("BRANCHID").Value
End If
Из конвертера я получил этот код:
XDocument ScriptDOC = default(XDocument);
string status = "";
ScriptDOC = XDocument.Parse(e.Result);
dynamic Result = from ele in XElement.Parse(ScriptDOC.ToString).Elements("HANDERDETAILS");
if ((Result.Descendants("RESULT") == null) == false)
status = Result.Descendants("RESULT").Value;
if (Strings.LCase(status) == "ok") {
if ((Result.Descendants("BRANCHID") == null) == false)
BranchID = Result.Descendants("BRANCHID").Value;
}
что не хорошо.
Это мой xml:
<AAAAA>
<HANDERDETAILS>
<RESULT>OK</RESULT>
<BRANCHID>4</BRANCHID>
<HANDLERID>1</HANDLERID>
<HANDLERNAME>some Admin</HANDLERNAME>
<BRANCHNAME>Asome New</BRANCHNAME>
</HANDERDETAILS>
</AAAAA>
1 ответ
Решение
Какой конвертер вы использовали? Похоже, что это может быть значительно улучшено. Вы действительно хотите следить за случаями, когда вы получаете коллекцию, но ожидаете одного объекта, который, по-видимому, не обрабатывается вашим исходным кодом.
XDocument ScriptDOC = XDocument.Parse(e.Result);
var Result = ScriptDOC.Element("AAAAA").Element("HANDERDETAILS");
if (Result.Element("RESULT") != null)
{
Status = Result.Element("RESULT").Value;
if (Status.ToLower() == "ok")
if (Result.Element("BRANCHID") != null)
BranchID = Result.Element("BRANCHID").Value;
}
Вы также хотите следить за пространствами имен. В VB вы можете объявить их как Import в вашем классе, но в C# вы должны явно указать их в своем коде.
XNamespace ns = "http://www.someuri";
var Result = ScriptDOC.Elements(ns + "HANDERDETAILS");