1
  <?xml version="1.0"?>
     <configuration  xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
         <configSections>

構成タグに xmlns を含む web.config ファイルがあります。

特定のノードを削除したい。しかし、私はこのファイルを読むことができません。

以下はコードです:

XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(PATH + WEB_CONFIG_PATH);
        //XmlNode t = xmlDoc.SelectSingleNode("/system.webServer/handlers  /add[@path='Reserved.ReportViewerWebControl.axd']");
        XmlNode t = xmlDoc.SelectSingleNode("/configuration/system.webServer");
        if (t != null)
        {
            t.ParentNode.RemoveChild(t);
            xmlDoc.Save(PATH + WEB_CONFIG_PATH);
        }

構成タグから xmlns を削除すると、このコードは正常に機能します。

xmlns が存在する場合にこのコードが機能するように、何らかの解決策を提供してください。

4

1 に答える 1

3

XmlNamespaceManagerコードに を追加し、それをSelectSingleNode呼び出しで使用して、XML 名前空間のサポートを追加する必要があります。また、呼び出しの XPath を微調整して、XML 名前空間プレフィックスを含める必要があります。

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(PATH + WEB_CONFIG_PATH);

// add a XmlNamespaceManager to deal with the XML namespaces in your XML document        
XmlNamespaceManager xmlNsMgr = new XmlNamespaceManager(xmlDoc.NameTable);

// add an explicit XML namespace with prefix. NOTE: for some reason, the approach of using
// an empty string indicating a *default* XML namespace doesn't work with .NET's XmlDocument
xmlNsMgr.AddNamespace("ns", "http://schemas.microsoft.com/.NetConfiguration/v2.0");

// tweak your call - use the XML namespace prefix in your XPath, provide the namespace manager
XmlNode t = xmlDoc.SelectSingleNode("/ns:configuration/ns:system.webServer", xmlNsMgr);

if (t != null)
{
    ......
于 2013-01-08T06:22:40.377 に答える