一回の操作で名前空間のあるxmlファイルに遭遇した問題を覚えてください。
4955 ワード
最近は指定されたxmlファイルを簡単に操作するためのツールを作りました。もしこれが操作されるxmlファイルであれば。
xmlファイルが名前空間を持つ場合、あなたのxmlの様々な種類の要素が名前空間を正確に指定していない場合、名前空間はデフォルトの名前空間です。を選択します。ノードを追加すると、ノードの名前空間が指定されていない場合は、デフォルトの名前空間は使用されません。
したがって、解決の方法はもちろん、ノードを追加する時に名前空間を指定するので、正しいやり方は:
加入するノードを作成する時にxmlUrlを指定すればいいです。
参照リンク
<?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ファイルの名前空間です。以上の問題を解決しました。私の小道具もできました。問題があったら、皆さんと解決方法を共有してください。この文章を書く目的は簡単です。ありがとうございます。参照リンク