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 に答える