Hi,
Sorry if this is deemed to be a cross post (I also posted to the
microsoft.public.xml)
(Using .NET 2003, VB, C# on a Win2k PC)
I'm trying to retrieve nodes from an XML doc by name. I have found that the
following code, when translated into C# works perfectly, but not when used
in VB. In the example below the "application" node returns a value when
accessed through the C# code but not with the VB code.
If I add a prefix to the namespace in the source XML doc e.g. Change
<application xmlns="http://MyCompanyName.co.uk/test/1.0.08/">
to <application xmlns:TEST="http://MyCompanyName.co.uk/test/1.0.08/">
then it works fine in both languages.
Does anyone have experience of this problem ?
Below are the code samples from both languages... followed by the XML
excerpt
Thanks
Gary
VB Code --
****
Imports System
Imports System.Xml
Module Module1
Sub Main()
Try
Dim oXmlDoc As New Xml.XmlDocument
Dim sFileName As String = "04231ESWM001240.xml"
oXmlDoc.Load(sFileName)
Dim nsmgr As XmlNamespaceManager = New
XmlNamespaceManager(oXmlDoc.NameTable)
nsmgr.AddNamespace("clps",
"http://MyCompanyName.co.uk/test/1.0.08")
nsmgr.AddNamespace("xsi",
"http://www.w3.org/2001/XMLSchema-instance")
nsmgr.AddNamespace("xsd", "http://www.w3.org/2001/XMLSchema")
nsmgr.AddNamespace("soap",
"http://schemas.xmlsoap.org/soap/envelope/")
Console.WriteLine("Def NS = " & nsmgr.DefaultNamespace)
Dim oNode As Xml.XmlNode
oNode = oXmlDoc.SelectSingleNode("//application", nsmgr)
If oNode Is Nothing Then
Console.WriteLine("The application object was not found")
Else
Console.WriteLine(oNode.InnerText)
End If
Finally
Console.WriteLine("Press a key to end")
Console.Read()
End Try
End Sub
and the C# version ****
using System;
using System.Xml;
namespace TestXML
{
class Class1
{
ry>
[STAThread]
static void Main(string[] args)
{
XmlDocument xmlRequest = new XmlDocument();
xmlRequest.Load(@"N:\04231ESWM001240.xml");
XmlNamespaceManager nsMgr = new XmlNamespaceManager(xmlRequest.NameTable);
nsMgr.AddNamespace("clps","http://MyCompanyName.co.uk/test/1.0.08/");
nsMgr.AddNamespace("xsi","http://www.w3.org/2001/XMLSchema-instance");
nsMgr.AddNamespace("xsd","http://www.w3.org/2001/XMLSchema");
nsMgr.AddNamespace("soap","http://schemas.xmlsoap.org/soap/envelope/");
Console.WriteLine("nsMgr.DefaultNamespace: " + nsMgr.DefaultNamespace);
XmlNode applicationNode = xmlRequest.SelectSingleNode("//application",
nsMgr);
if (applicationNode == null)
{
Console.WriteLine("application not found");
}
else
{
Console.WriteLine(applicationNode.InnerText.Trim() );
}
Console.WriteLine(">>>Press a key to end");
Console.ReadLine();
}
}
}
XML *****
<?xml version="1.0"?>
<AppRoot xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<application xmlns="http://MyCompanyName.co.uk/test/1.0.08/">
<docid>04231ESWM001240</docid>
<applicationerror>false</applicationerror>
<HoldIndicator>false</HoldIndicator>
<field>
<name>TextReg1</name>
<text>STEP</text>
<error>false</error>
</field>
<field>
<name>portfolio_link_code</name>
<text>STEP</text>
<error>false</error>
</field>
</application>
</AppRoot>