将“运行文本”属性移动到元素的内容

本文关键字:元素 移动 属性 运行 文本 运行文本 | 更新日期: 2023-09-27 18:31:34

如何将 Run 的文本属性移动到 Run 标签的内容中,例如

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

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

任何帮助将不胜感激。

将“运行文本”属性移动到元素的内容

借用@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();
 XElement elem = XElement.Parse(str);
 string str2 = new XElement(elem.Name, elem.Attribute("Text").Value).ToString();
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;