将linq-to-xml查询从vb转换为c#

时间:2011-08-30 16:16:06

标签: linq vb.net-to-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 个答案:

答案 0 :(得分:2)

您使用的转换器是什么?看起来它可以得到显着改善。您确实需要注意您收到一个集合但期望您的原始代码似乎没有处理的单个对象的情况。

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");