reading XML files from codebehind file

  • Thread starter Thread starter Martin Eyles
  • Start date Start date
M

Martin Eyles

Hi,
I have a configuration file I made in xml which I am using to name a
database server. (this way I can deploy my web page on various servers, and
just change this file to make it work). Unfortunately, I can't figure out
how to read this from the server side code behind file (either vb or c#).
Can anyone
post some sample code for this.

Thanks,
Martin

(xml file follows)

aConfigFile.xml
 
Martin said:
Hi,
I have a configuration file I made in xml which I am using to name
a database server. (this way I can deploy my web page on various
servers, and just change this file to make it work). Unfortunately, I
can't figure out how to read this from the server side code behind
file (either vb or c#). Can anyone
post some sample code for this.

Thanks,
Martin

(xml file follows)

aConfigFile.xml
-------------------
<?xml version="1.0" encoding="utf-8" ?>
<aConfigFile xmlns="http://tempuri.org/aConfigFile.xsd">
<ServerName>thisIsTheNameOfADatabaseServer</ServerName>
</aConfigFile>

You have to figure out the exact path to your file (hint: use MapPath),
then you can load that into an XmlDocument. If you place this file
within the website, use the extension ".config" (instead of .xml), then visitors
can't access that file.

XmlDocument cfg = new XmlDocument();
cfg.Load(MapPath("myfile.config");

XmlNode nd = cfg.SelectSingleNode("//ServerName");

but: you either have to remove the namespace (xmlns=..), or figure out how to
use the overload of SelectSingleNode with namespacemanager.

Hans Kesting
 
Hi,
Thanks for the code. I had to change XmlDocument to XmlDataDocument, but
otherwise it works (from a c# page). This is the final version I have put in
the test page I did.

System.Xml.XmlDataDocument cfg = new System.Xml.XmlDataDocument();
cfg.Load(MapPath("aConfigFile.config"));
System.Xml.XmlNode nd = cfg.SelectSingleNode("//ServerName");
Response.Write(nd.InnerText);

I just need to know what to do to convert it to VB.NET, as some of my pages
use this too. Most of this is Ok - My problem is that vb doesn't appear to
support the System.Xml.XmlNode object. Any Ideas?

Thanks,
Martin
 
Sorry,
just discovered what was wrong with the conversion. intelitext kept
trying to make it XmlNodeType, but higher up the list XmlNode was available,
and this works. The VB code works out to be:-

Dim cfg As New System.Xml.XmlDataDocument
cfg.Load(MapPath("aConfigFile.config"))
Dim nd As System.Xml.XmlNode
nd = cfg.SelectSingleNode("//ServerName")
Response.Write(nd.InnerText)
 
Is there some reason that you are not using
System.ConfigurationSettings.AppSettings() to get to the web.config file?

This is a very easy way for ASP.NET code (C# or VB.NET) to get to
configuration data.
 
web.config has loads of junk data that I don't want in my config file. I
want an easy to write config file that I can write for each of the places
this is installed.
 
Well, Martin, I would recommend using the .Net Configuration namespace, and
the web.config file. It may be uncomfortable to you now, but it is very
well-conceived, extensible, and standardized, meaning that other .Net
developers will already know how to use it if necessary.

However, assuming you want to go this route, check out the various
System.Xml namespaces. The .Net platform also has XML support out the wazoo.
Which namespaces and classes you use depend on how you want to use the XML.
Do you want a simple XML document, or something more strongly-typed? Do you
need to work with a DTD? A Schema? Again, the .Net platform and CLR support
all of the XML specification.

--
HTH,

Kevin Spencer
Microsoft MVP
..Net Developer
Neither a follower nor a lender be.

Martin Eyles said:
web.config has loads of junk data that I don't want in my config file. I
want an easy to write config file that I can write for each of the places
this is installed.
 
for context, the file only contains the name of an sql server at the moment.
There may be a couple of added bits later, but probably not more than five
tags. The config file works now, so I'm not bothered about any extra. Just
want to keep it simple. (thanks for all the earlier help, this sorted out
the problems I was having). Still, I take the point that, if I'm doing
something more complex, it might be useful to use another method.

<?xml version="1.0" encoding="utf-8" ?>
<L_______Config>
<ServerName>server</ServerName>
</L_______Config>

(L_______ is just to obscure a product name)

Thanks,
Martin

--
Martin Eyles
(e-mail address removed)

Kevin Spencer said:
Well, Martin, I would recommend using the .Net Configuration namespace, and
the web.config file. It may be uncomfortable to you now, but it is very
well-conceived, extensible, and standardized, meaning that other .Net
developers will already know how to use it if necessary.

However, assuming you want to go this route, check out the various
System.Xml namespaces. The .Net platform also has XML support out the wazoo.
Which namespaces and classes you use depend on how you want to use the XML.
Do you want a simple XML document, or something more strongly-typed? Do you
need to work with a DTD? A Schema? Again, the .Net platform and CLR support
all of the XML specification.

--
HTH,

Kevin Spencer
Microsoft MVP
.Net Developer
Neither a follower nor a lender be.
 
Well, Martin, you actually have a lot of control over your web.config file
(and other configuration files). You can add custom configuration sections,
use the existing appSettings section, and get quite a lot of mileage out of
it, without getting too complicated. You can also add comments to it.

But for a simple XML file such as you've described, the
System.Xml.XmlDocument class can provide you with most of what you need. You
can create one by simply passing a path to the XML file to its constructor.
And you can iterate through its nodes, and plenty more, with a great deal of
detail.

--
HTH,

Kevin Spencer
Microsoft MVP
..Net Developer
Neither a follower nor a lender be.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Back
Top