0
<?xml version="1.0" encoding="utf-8"?>
 <configSections>
    ----------
    ----------
 </configSections>
 <appSettings>
     <add key="Name" Value="XXX">
     <add key="Age" Value="10">
     <!--<add key="Number" value="5"/>--><!--uncomment it-->
     <!--<add key="Class" value="10"/>-->
 </appSettings>

最初のコメント行のコメントを外したい。

これまでの私のコードは次のとおりです。

foreach (XmlElement xElement in xmlDoc.DocumentElement)
{
    if (xElement.Name == "appSettings")
    {
        foreach (XmlNode xNodes in xElement.ChildNodes)
        {
            if (xNodes.NodeType == XmlNodeType.Comment)
            {
                if (xNodes.InnerText.Contains("Number"))
                {
                    // Now the commented line is in xNodes.InnerText.
                    // How can i add this line in that xml file under appSettings?
                }
            }
        }
        break;
    }
}
4

3 に答える 3

1

次のコードを使用できます。

var appSettingsNode = xmlDoc.DocumentElement
                            .ChildNodes
                            .Cast<XmlNode>()
                            .FirstOrDefault(x => x.Name == "appSettings");

if(appSettingsNode == null)
    return;

var commentedNodes = appSettingsNode.ChildNodes
                                    .Cast<XmlNode>()
                                    .Where(x => x.NodeType == XmlNodeType.Comment
                                                && (x.InnerText.Contains("Number")
                                                    || x.InnerText.Contains("Class")))
                                    .ToList();

foreach(var commentedNode in commentedNodes)
{
    var tmpDoc = new XmlDocument();
    tmpDoc.LoadXml(commentedNode.InnerText);
    appSettingsNode.ReplaceChild(xmlDoc.ImportNode(tmpDoc.DocumentElement, true),
                                 commentedNode);

    // Use this instead if you want to keep the commented line:
    // appSettingsNode.AppendChild(xmlDoc.ImportNode(tmpDoc.DocumentElement, true));
}

重要な部分はforeachループ内の部分です。
ここでは、コメント化されたノードを new XmlDocument( tmpDoc) にロードして、「実際の」XmlNodeバックとして取得します。次に、コメント ノード ( commentedNode) を新しくロードしたノード ( ) に置き換えるだけtmpDoc.DocumentElementです。

残りは美化されたオリジナルのコードです。ループと if を LINQ クエリに置き換えることで、循環的な複雑さをどのように減らしたかに注目してください。

于 2012-08-31T07:30:59.457 に答える
0

C# .net では、通常System.Configuration.ConfigurationManager.AppSettings、構成ファイルから appSetting を読み取るために使用します。

コメントアウトされた行を web.config から読み取ろうとしている場合は、これを行うためのカスタム コードを記述する必要があります。

この答えは、あなたに良いスタートを与えるはずです

于 2012-08-30T05:17:23.123 に答える
0

Name キーを読みたい場合は、次のようにします。

string myUsername = System.Configuration.ConfigurationManager.AppSettings["Name"];
于 2012-08-29T11:00:29.067 に答える