-1

私は私の下XMLにあるweb.config

 <handlers>
  <remove name="ChartImageHandler" />            
  <add name="PageNotFoundhandelarrtf" path="*.rtf" verb="*" 
     modules="IsapiModule"  scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\
     aspnet_isapi.dll" resourceType="Unspecified"  preCondition=
     "classicMode,runtimeVersionv2.0,bitness32" />
  <add name="ChartImageHandler" preCondition="integratedMode" verb="GET,HEAD" path="ChartImg.axd" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization,  Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  <add name="Keyoti_SearchEngine_Web_CallBackHandler_ashx" verb="*" preCondition="integratedMode" path="Keyoti.SearchEngine.Web.CallBackHandler.ashx" type="Keyoti.SearchEngine.Web.CallBackHandler, Keyoti2.SearchEngine.Web, Version=2012.5.12.706, Culture=neutral, PublicKeyToken=58d9fd2e9ec4dc0e" />
  <add path="Reserved.ReportViewerWebControl.axd" 
     verb="*"  type="Microsoft.Reporting.WebForms.HttpHandler,
     Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral,  PublicKeyToken
     =b03f5f7f11d50a3a" validate="false" />
 </handlers>

XMLそして、このセクションから最後のノードを削除する必要がありますReportViewer。上記のノードを削除するよりも、<handler>最初にセクションを見つける必要があります。<handler>

以下のコードを使用していますが、機能していません...以下のコードの何が問題なのか教えてください..

XElement xEmp = XElement.Load(PATH + WEB_CONFIG_PATH);
var empDetails = from emps in xEmp.Elements("handlers")
                 where emps.Element("path").Equals("Reserved.ReportViewerWebControl.axd")
                 select emps;
empDetails.First().Remove();
xEmp.Save(@"D:\Employees.xml");
4

3 に答える 3

2

次のコード スニペットを使用してみる

XElement xEmp = XElement.Load(PATH + WEB_CONFIG_PATH);
var pathToRemove = "Reserved.ReportViewerWebControl.axd";

var empDetails= xEmp.XPathSelectElements("//handlers")
                    .Descendants()
                    .First(d => d.Attributes().Any(atr => atr.Name == "path" && atr.Value == pathToRemove));

empDetails.Remove();
xEmp.Save(@"D:\Employees.xml");

クエリ構文に固執したい場合でも、少し混ぜ合わせる必要があります。

var empDetails = from emps in xEmp.XPathSelectElements("//handlers").Descendants()
                 where emps.Attributes().Any(atr => atr.Name == "path" && atr.Value == pathToRemove)
                 select emps;
于 2013-01-07T13:14:59.423 に答える
0

このコードを実行したところ、うまくいくようです。これが私がしたことです。. .

XDocument doc = XDocument.Parse(INPUT_DATA);
XElement handlers = doc.Element("handlers");
IEnumerable<XElement> add = null;
IEnumerable<XElement> pFind = null;

if (handlers != null)
{             
    add = handlers.Elements();
    if (add != null)
    {

        pFind = (from itm in add
                    where itm.Attribute("path") != null
                    && itm.Attribute("path").Value != null
                    && itm.Attribute("path").Value == "Reserved.ReportViewerWebControl.axd"
                    select itm);

        if(pFind != null)
            pFind.FirstOrDefault().Remove();
    }
}

テスト済みの完全なコードは次のとおりです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;

namespace XDocu
{
    class Program
    {
        static void Main(string[] args)
        {
        XDocument doc = XDocument.Parse(INPUT_DATA);
        XElement handlers = doc.Element("handlers");
        IEnumerable<XElement> add = null;
        IEnumerable<XElement> pFind = null;
        int oldCount = doc.Element("handlers").Elements().Count();

        if (handlers != null)
        {             
            add = handlers.Elements();
            if (add != null)
            {

                pFind = (from itm in add
                            where itm.Attribute("path") != null
                            && itm.Attribute("path").Value != null
                            && itm.Attribute("path").Value == "Reserved.ReportViewerWebControl.axd"
                            select itm);

                if(pFind != null)
                    pFind.LastOrDefault().Remove();
            }
        }

            //print it
            if (add != null)
                Console.WriteLine("Old Count: {0}\nNew Count: {1}", oldCount, add.Count());
        }

        const string INPUT_DATA =
        @"<?xml version=""1.0""?>
        <handlers>
        <remove name=""ChartImageHandler"" />            
        <add name=""PageNotFoundhandelarrtf"" path=""*.rtf"" verb=""*"" 
            modules=""IsapiModule""  scriptProcessor=""%windir%\Microsoft.NET\Framework\v2.0.50727\
            aspnet_isapi.dll"" resourceType=""Unspecified""  preCondition=
            ""classicMode,runtimeVersionv2.0,bitness32"" />
        <add name=""ChartImageHandler"" preCondition=""integratedMode"" verb=""GET,HEAD"" path=""ChartImg.axd"" type=""System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization,  Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"" />
        <add name=""Keyoti_SearchEngine_Web_CallBackHandler_ashx"" verb=""*"" preCondition=""integratedMode"" path=""Keyoti.SearchEngine.Web.CallBackHandler.ashx"" type=""Keyoti.SearchEngine.Web.CallBackHandler, Keyoti2.SearchEngine.Web, Version=2012.5.12.706, Culture=neutral, PublicKeyToken=58d9fd2e9ec4dc0e"" />
        <add path=""Reserved.ReportViewerWebControl.axd"" 
            verb=""*""  type=""Microsoft.Reporting.WebForms.HttpHandler,
            Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral,  PublicKeyToken
            =b03f5f7f11d50a3a"" validate=""false"" />
        </handlers>";

    }
}

コンパイラは、基準に基づいてアイテムを正しく削除する出力を表示します。. .

<handlers>
  <remove name="ChartImageHandler" />
  <add name="PageNotFoundhandelarrtf" path="*.rtf" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\             aspnet_isapi.dll" resourceType="Unspecified" preCondition="classicMode,runtimeVersionv2.0,bitness32" />
  <add name="ChartImageHandler" preCondition="integratedMode" verb="GET,HEAD" path="ChartImg.axd" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization,  Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  <add name="Keyoti_SearchEngine_Web_CallBackHandler_ashx" verb="*" preCondition="integratedMode" path="Keyoti.SearchEngine.Web.CallBackHandler.ashx" type="Keyoti.SearchEngine.Web.CallBackHandler, Keyoti2.SearchEngine.Web, Version=2012.5.12.706, Culture=neutral, PublicKeyToken=58d9fd2e9ec4dc0e" />
</handlers>

つまり、除外して、<Add path="Reserved.ReportViewerWebControl.axd" . . . />

于 2013-01-07T13:41:40.867 に答える
0

XML ファイルからノードを削除する方法は次のとおりです: http://www.wrangle.in/topic/asw0zgftjzqr/C-Sharp-tricks-deleting-node-from-xml-fi

于 2013-01-07T13:43:17.347 に答える