一回の操作で名前空間のあるxmlファイルに遭遇した問題を覚えてください。

4955 ワード

最近は指定されたxmlファイルを簡単に操作するためのツールを作りました。もしこれが操作されるxmlファイルであれば。
<?xml version="1.0" encoding="utf-8"?>

<ConfigEntities xmlns="http://itlogica.com/ServiceConfigurationSchema.xsd">

<ServiceInstance AssemblyPath="D:\WorkingDir\Agspan\Benchmark\agspanadvantage\services\EKS Gatekeeper Service\Instance\HTSidataqualityreportService\EKS.PoultryHTSiDataQuaity.Service.dll" MainClass="EKS.PoultryHTSiDataQualityReport.Service.HTSiDataQuaityService" Enabled="false" Description="EKSPoultryHTSiDataQuaityService" />

......

</ConfigEntities>
次のコードでxmlファイルを読み込めないことが分かりました。
XmlNodeList nodes = xmlDoc.SelectNodes("/ConfigEntities/ServiceInstance");
インターネットでいろいろ調べてみましたが、名前空間のあるxmlファイルは上記の方法で読み込めませんでした。このように読めば読みきれます。
     XmlNamespaceManager nsmgr = new XmlNamespaceManager(xmlDoc.NameTable);//           

     nsmgr.AddNamespace("ns", "http://itlogica.com/ServiceConfigurationSchema.xsd");//              ,  ns          ,"http://itlogica.com/ServiceConfigurationSchema.xsd" xml      。      string  。

     XmlNodeList nodes =xmlDoc.SelectNodes("/ns:ConfigEntities/ns:ServiceInstance", nsmgr);
ただし、xmlファイルにノードを追加すると、また問題が発生します。
 XmlNode   node = xmlDoc.SelectSingleNode("/ns:ConfigEntities", nsmgr);/          。     ns nsmgr

  XmlNode nodes = xmlDoc.CreateElement("ServiceInstance");
私は一つの方法でxmlファイルにノードを追加すると、デフォルトの属性「xmls=」「次のようになります。
<ServiceInstance AssemblyPath="D:\WorkingDir\Agspan\Benchmark\agspanadvantage\services\EKS Gatekeeper Service\Instance\HTSidataqualityreportService\EKS.PoultryHTSiDataQuaity.Service.dll" MainClass="EKS.PoultryHTSiDataQualityReport.Service.HTSiDataQuaityService" Enabled="false" Description="EKSPoultryHTSiDataQuaityService" xmls="" />
調べてみます。
xmlファイルが名前空間を持つ場合、あなたのxmlの様々な種類の要素が名前空間を正確に指定していない場合、名前空間はデフォルトの名前空間です。を選択します。ノードを追加すると、ノードの名前空間が指定されていない場合は、デフォルトの名前空間は使用されません。
したがって、解決の方法はもちろん、ノードを追加する時に名前空間を指定するので、正しいやり方は:
加入するノードを作成する時にxmlUrlを指定すればいいです。
XmlElement jobElement = xmlDoc.CreateElement("job", xmlUrl);
xmlUrlとは上記で想定されているxmlファイルの名前空間です。以上の問題を解決しました。私の小道具もできました。問題があったら、皆さんと解決方法を共有してください。この文章を書く目的は簡単です。ありがとうございます。
参照リンク