2

私は次のものを持っています:

var topic = "<option value=\"123\">X</option>\r\n  <option value=\"456\">XX</option>\r\n";

そして、次のような文字列:

var topicValue = "456";

topicValue が一致する場合に次のような新しいトピック文字列を作成する方法はありますか。

var topic = "<option value=\"123\">X</option>\r\n  <option value=\"456\" selected=\"selected\" >XX</option>\r\n";

よくわからないのは、トピック文字列にあるバックスラッシュで機能する正規表現を作成する方法です。また、正規表現を使用するよりも簡単にこれを行う方法はありますか?

4

3 に答える 3

3

XML を文字列として操作することは決して良い考えではありません。に XML の一部があるようですtopic。XML のように扱ってみませんか。まず、操作するためだけに有効な XML にしましょう。

        <options>
              <option value=\"123\" isSelectd=\"false\">X</option>
              <option value=\"456\" isSelectd=\"false\">XX</option>
        </options>

ルート ノードがここに追加され、両方の子ノードに対して最初は false で<options>ある新しい属性も追加されます。isSelectdの値を持つノードを456検索して更新する必要があります。XmlDocumentクラスを使用すると、このように必要なものを簡単に実現できます。

        var topic = "<options>" + 
               "<option value=\"123\" isSelectd=\"false\">X</option>" +
               "<option value=\"456\" isSelectd=\"false\">XX</option>" + 
               "</options>";

        int selectedValue = 456;

        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.LoadXml(topic);
        foreach (XmlNode node in xmlDoc.ChildNodes[0].ChildNodes)
        {
            int value = Convert.ToInt32(node.Attributes[0].Value.ToString());
            if (value == selectedValue)
                node.Attributes[1].Value = "ture";
        }

        topic = xmlDoc.InnerXml;

トピックには次の XML が含まれるようになりました。

        <options>
              <option value=\"123\" isSelectd=\"false\">X</option>
              <option value=\"456\" isSelectd=\"true\">XX</option>
        </options>
于 2012-08-15T06:27:16.617 に答える
1

書かれている通りに書いてください。例えば:

        string myString = "My name is \"John\"";
        Console.WriteLine(myString);
        myString = myString.Replace("\"John\"", "\"Jony\"");
        Console.WriteLine(myString);
        Console.ReadLine();

以下のコードを試して、必要なものを達成してください。

        string topic = "<option value=\"123\">X</option>\r\n  <option value=\"456\">XX</option>\r\n";
        Console.WriteLine(topic);
        string topicValue = "456";
        string mustBeReplaced = string.Empty;
        string replaceResult = string.Empty;

        if (topic.Contains(topicValue))
        {
            mustBeReplaced = "value=\"" + topicValue + "\"";
            replaceResult = mustBeReplaced + " selected=\"selected\"";
            topic = topic.Replace(mustBeReplaced, replaceResult);
        }

        Console.WriteLine(topic);
        Console.ReadLine();
于 2012-08-15T05:30:28.107 に答える
1

さて、これがコードです。これは、空白とフォーマットが一致している場合にのみ機能することに注意してください。

var topic = // topic here

const string optionFormat = @"<option value=\""{0}\""";

var topicValue = // topic value here

var topicToReplace = String.Format(optionFormat, topicValue);
var replaced = topic.Replace(topicToReplace , topicToReplace + @" selected=\""selected\""");
于 2012-08-15T05:32:41.193 に答える