0

我有我的 XML

<?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>

我需要 recordsDirectory 标记的值。我试过这个,

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

但是有一个错误说

你调用的对象是空的。

4

3 回答 3

3

是的,SelectSingleNode("recordsDirectory")将返回 null,因为您将该 XPath 应用于文档本身——它recordsDirectory在顶层没有元素,它有一个configuration元素。你要:

xmldoc.SelectSingleNode("configuration/recordsDirectory")

或者通过根元素:

xmldoc.DocumentElement.SelectSingleNode("recordsDirectory")

(或者您可以获取所有后代元素 callrecordsDirectory等。这里有很多选项。)

如果可以的话,我个人建议更改为使用 LINQ to XML,因为它是使用 XML 的一种更简单的方式,IMO。到目前为止,您给出的代码并不算太糟糕,但是当您做更多的事情时,XmlDocument您会遇到一些痛苦 - 无论如何,相对而言。

您还应该考虑将“获取节点”与获取文本分开,这样您就可以验证您是否找到了您想要的:

XmlNode node = xmldoc.DocumentElement.SelectSingleNode("recordsDirectory");
if (node != null)
{
    // Use it
}
else
{
    // No such node. What do you want to do?
}
于 2013-10-31T07:08:11.303 回答
2

试试这个SelectSingleNode

XmlNode node = doc.SelectSingleNode("/configuration/recordsDirectory");
string s = node.InnerText.ToString();
于 2013-10-31T07:10:14.703 回答
1

您好要阅读 recordsDirectory 标签,您需要执行以下操作:

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

它会完美地工作

于 2013-10-31T07:24:44.387 回答