Anoushka Seechurn
Anoushka Seechurn

Reputation: 2256

Reading XML to get value of a tag c#

I have my XML as

<?xml version="1.0" encoding="utf-8" ?>
<configuration>   
 <recordsDirectory>F:/model_RCCMREC/</recordsDirectory> 
 <transferDirectory>F:/model_RCCMrecTransfered/</transferDirectory>
 <logDirectory>F:/model_RCCMLOG/</logDirectory>
 <connectionstring>Data Source=192.168.1.7;Initial Catalog=RCCMdb;User ID=genesys;Password=genesys</connectionstring>  
  <table>RCCMrec</table> 
    <DBdestination>
    <val1>ANI</val1>
    <val2>DNIS</val2>
    <val3>Date</val3>
    <val4>Time</val4>
    <val5>ConnId</val5>
    <val6>UUID</val6>
    <val7>EmployeeId</val7>
    <val8>AgentDN</val8> 
    </DBdestination>   
</configuration>

I need the value of the recordsDirectory tag. I tried this,

XmlDocument xmldoc = new XmlDocument(); 
xmldoc.Load("C:/Users/yachna/Desktop/RCCM_TOOL/configRCCM.xml");
string bvalue = xmldoc.SelectSingleNode("recordsDirectory").InnerText.ToString();

But got an error saying

Object reference not set to an instance of an object.

Upvotes: 0

Views: 187

Answers (3)

Rohit Vyas
Rohit Vyas

Reputation: 1969

Hi To read the recordsDirectory tag you need to do :

 XmlDocument xmldoc = new XmlDocument(); 
            xmldoc.Load("C:/Users/yachna/Desktop/RCCM_TOOL/configRCCM.xml");
            string bvalue = xmldoc.SelectSingleNode("configuration/recordsDirectory").InnerText.ToString();

It will work perfactly

Upvotes: 1

Priya Gund
Priya Gund

Reputation: 156

Try this one in your SelectSingleNode

XmlNode node = doc.SelectSingleNode("/configuration/recordsDirectory");
string s = node.InnerText.ToString();

Upvotes: 2

Jon Skeet
Jon Skeet

Reputation: 1500785

Yes, SelectSingleNode("recordsDirectory") will return null, because you're applying that XPath to the document itself - which doesn't have a recordsDirectory element at the top level, it has a configuration element. You want:

xmldoc.SelectSingleNode("configuration/recordsDirectory")

Or go via the root element:

xmldoc.DocumentElement.SelectSingleNode("recordsDirectory")

(Or you can fetch all descendant elements call recordsDirectory, etc. There are plenty of options here.)

Personally I'd suggest changing to use LINQ to XML if you can, as it's a simpler way of using XML, IMO. It's not too bad in the code you've given so far, but as you do more things with XmlDocument you'll run into it being a bit of a pain - relatively speaking, anyway.

You should also consider separating the "fetching the node" from getting the text, so you can validate that you've found the one you want:

XmlNode node = xmldoc.DocumentElement.SelectSingleNode("recordsDirectory");
if (node != null)
{
    // Use it
}
else
{
    // No such node. What do you want to do?
}

Upvotes: 3

Related Questions