【问题标题】:Replace xml tags in a string with controls用控件替换字符串中的 xml 标签
【发布时间】:2012-05-11 15:01:48
【问题描述】:

我有一个字符串,它可能看起来像这样:

"Sandra <as type="1">walked</as> in the park, and met a <as type="3">random</a> stranger".

基于这些 xml 标签,我想用其他东西(控件列表)替换标签。

例如,当我看到 &lt;as type="1"&gt;walked&lt;/as&gt; 时,我想返回一个文字和一个文本框以替换该句子。

我想最简单的方法是将整个内容添加到占位符中,但我不知道如何替换部分。

【问题讨论】:

  • 你打算用改变的xml做什么?你打算在 aspx 页面上显示这些控件吗?
  • 如果您希望它们成为 ASP.NET 控件,您应该只解析整个字符串并动态添加控件。如果您想使用javascript对控件进行操作并且不需要它们在服务器端,您可以尝试使用一个带有html的Literal控件来显示。无论哪种方式,我想您都应该手动解析字符串。
  • 是的,然后对用户在这些控件中提供的输入做出反应
  • 是否要为不同的type 属性插入不同类型的控件?
  • 您提供的字符串也不是有效的 xml,而是具有预定义标签的字符串。

标签: c# asp.net text replace


【解决方案1】:

您目前没有有效的 XML,因此作为第一步,我建议您使用一些基本标签将其包围,例如:

var start = "Sandra <as type=\"1\">walked</as> in the park, and met a <as type=\"3\">random</as> stranger";
var startAsXml = "<root>" + start + "</root>";

现在我们可以解析它了:

var doc = XElement.Parse(startAsXml);

现在我们在这个 XML 中有两种类型的节点 - 文本和元素。您可以轻松地循环通过任意数量的方式并提取它们,更改它们,做你喜欢的事情。这是一个例子:

foreach (var node in doc.Nodes()) 
{
    if (node.NodeType == XmlNodeType.Text) Console.WriteLine("Text: {0}", node.ToString().Trim());
    else if (node.NodeType == XmlNodeType.Element) 
    {
        var element = (XElement)node;
        Console.WriteLine("Element: Name={0} Type={1} Value={2}",
                          element.Name, element.Attribute("type").Value, element.Value);
    }
}

这将打印:

Text: Sandra 
Element: Name=as Type=1 Value=walked
Text:  in the park, and met a 
Element: Name=as Type=3 Value=random
Text:  stranger

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多