【问题标题】:Move the Run Text property to the content of the element将 Run Text 属性移动到元素的内容
【发布时间】:2012-04-18 23:27:36
【问题描述】:

如何将 Run 的 Text 属性移动到 Run 标记的内容中。例如

string str = "<Run Text='hello world' />";

//into

string str2 = "<Run>hello world</Run>";

请记住,字符串可能包含多个段落和多个运行(我希望所有运行都更改)。理想情况下,我想将其保留为字符串,而不是转换为 XML 或 XAML,所以也许是 Regex 语句?如果没有,我会接受转换。

非常感谢任何帮助。

【问题讨论】:

    标签: c# xml silverlight richtextbox linq-to-xml


    【解决方案1】:

    借用@ionden:

    string str = "<Para> <Run Text='hello world' /> <Run Text='goodbye world' /></Para>";
    XElement elem = XElement.Parse(str);
    
    var runs = elem.DescendantsAndSelf("Run");
    
    foreach (var run in runs)
    {
        // modify in-place to preserve the (unknown) structure. 
        run.Value = run.Attribute("Text").Value;
        run.Attribute("Text").Remove();
    }
    
    str = elem.ToString();
    

    【讨论】:

    • 我似乎无法让 DescendantsAndSelf("Run") 正常工作。没有“运行”它可以工作(运行和段落的混合),但它没有返回任何东西......
    • 刚刚测试过,工作正常。列出问题中的更多测试用例。
    【解决方案2】:
     XElement elem = XElement.Parse(str);
     string str2 = new XElement(elem.Name, elem.Attribute("Text").Value).ToString();
    

    【讨论】:

    • 不错的开始,但您必须迭代/递归所有运行。
    • @Henk 是的,这确实只是一个想法
    【解决方案3】:
    string str = "<Root><Run Text='hello world' /><Run Text='hello world2' /></Root>";
    XmlDocument doc = new XmlDocument();
    doc.LoadXml(str);
    XmlNodeList nodes = doc.SelectNodes("Root/Run");
    foreach (XmlNode node in nodes)
    {
        XmlAttribute attr = node.Attributes["Text"];
        node.InnerText = attr.Value.ToString();
        node.Attributes.Remove(attr);                
    }
    str = doc.InnerXml;
    

    【讨论】:

      猜你喜欢
      • 2015-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-02
      • 2012-06-25
      • 1970-01-01
      • 1970-01-01
      • 2014-12-17
      相关资源
      最近更新 更多