Преобразование кода манипуляции 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 очень хорошо работать, с ним стоит поиграть.