Преобразование кода манипуляции XML из VB6 в C#

Я пытаюсь преобразовать эту функцию, которая была создана несколько лет назад в VB6, в C#, но я не уверен, как это сделать. В этом коде VB6 я не понимаю, как использовать MSXML2.DOMDocument40 в качестве параметра в C#. Я уверен, что это потребует использования XmlDocument вместо.

Private Function m_LoadXML(xmlDoc As MSXML2.DOMDocument40, xmlRoot As MSXML2.IXMLDOMElement, strXMLScript As String) As Boolean
    On Error GoTo Proc_Error

    Dim blnResult As Boolean
    Dim strMsg As String

    blnResult = False

    Set xmlDoc = New MSXML2.DOMDocument40

    If xmlDoc.Load(strXMLScript) Then
        Set xmlRoot = SafeElementNode(xmlDoc, mcstrXmlNodeRoot)

        If Not xmlRoot Is Nothing Then
            blnResult = True
        Else
            strMsg = "Invalid XML database definition file " & strXMLScript
            RaiseEvent ErrorMessage(strMsg)
        End If
    Else
        strMsg = "Can not load XML database definition file " & strXMLScript
        RaiseEvent ErrorMessage(strMsg)
    End If

    Proc_Exit:
        On Error Resume Next
        m_LoadXML = blnResult
        Exit Function

    Proc_Error:
        RaiseEvent ErrorMessage(Error)
        Resume Proc_Exit
End Function

Public Function SafeElementNode( _
        vxmlDocumentOrElement As MSXML2.IXMLDOMNode, _
        vstrQueryString As String _
    ) As MSXML2.IXMLDOMNode
        On Error Resume Next

        Set SafeElementNode = 
    vxmlDocumentOrElement.selectSingleNode(vstrQueryString)
End Function

Вот что я придумал до сих пор:

private bool m_LoadXML(XmlElement xmlRoot, string strXMLScript)
{
    bool blnResult = false;
    string strMsg;

    var xmlDoc = new XmlDocument();

    try
    {
        xmlDoc.Load(strXMLScript);
        xmlRoot = xmlDoc.DocumentElement;

        if (xmlRoot != null) blnResult = true;
        else
        {
            strMsg = "Invalid XML database definition file " + strXMLScript;
            MessageBox.Show(strMsg);
        }
    }
    catch (Exception)
    {
        strMsg = "Can not load XML database definition file " + strXMLScript;
        MessageBox.Show(strMsg);
        throw;
    }

    return blnResult;
}

1 ответ

Я думаю, что-то это должно работать. Существующий код не объявляет переменную xmlRoot как выходной параметр, поэтому в итоге вы получите нулевой корневой элемент.

private bool m_LoadXML(out XmlElement xmlRoot, string strXMLScript)
{
    bool blnResult = false;
    string strMsg;

    var xmlDoc = new XmlDocument();

    try
    {
        xmlDoc.Load(strXMLScript);
        xmlRoot = xmlDoc.DocumentElement;

        if (xmlRoot != null) blnResult = true;
        else
        {
            strMsg = "Invalid XML database definition file " + strXMLScript;
            MessageBox.Show(strMsg);
        }
    }
    catch (Exception)
    {
        strMsg = "Can not load XML database definition file " + strXMLScript;
        MessageBox.Show(strMsg);
        throw;
    }

    return blnResult;
}

private void TestLoadXml(string xmlFile)
{
    XmlElement elem;
    var result = m_LoadXML(out elem, xmlFile);
}

Как и предполагали другие комментаторы, с XDocument очень хорошо работать, с ним стоит поиграть.

Другие вопросы по тегам