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 作为字符串进行操作从来都不是一个好主意。看起来您在topic. 你为什么不把它当作一个 XML 来对待。首先让我们让它成为一个有效的 XML,只是为了使用它。

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

此处添加了根节点<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 回答