Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将“运行文本”属性移动到元素的内容_C#_Xml_Silverlight_Richtextbox_Linq To Xml - Fatal编程技术网

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

C# 将“运行文本”属性移动到元素的内容,c#,xml,silverlight,richtextbox,linq-to-xml,C#,Xml,Silverlight,Richtextbox,Linq To Xml,如何将Run的Text属性移动到Run标记的内容。e、 g string str = "<Run Text='hello world' />"; //into string str2 = "<Run>hello world</Run>"; string str=”“; //进入 string str2=“hello world”; 请记住,字符串可以包含多个段落和多个运行(我希望所有运行都被更改)。理想情况下,我希望将其保留为字符串,而不是转换为XML

如何将Run的Text属性移动到Run标记的内容。e、 g

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

//into

string str2 = "<Run>hello world</Run>";
string str=”“;
//进入
string str2=“hello world”;
请记住,字符串可以包含多个段落和多个运行(我希望所有运行都被更改)。理想情况下,我希望将其保留为字符串,而不是转换为XML或XAML,因此可能需要一个Regex语句?。如果没有,我将接受转换

任何帮助都将不胜感激。

string str=“”;
 XElement elem = XElement.Parse(str);
 string str2 = new XElement(elem.Name, elem.Attribute("Text").Value).ToString();
XmlDocument doc=新的XmlDocument(); doc.LoadXml(str); XmlNodeList节点=doc.SelectNodes(“根/运行”); foreach(节点中的XmlNode节点) { xmldattribute attr=node.Attributes[“Text”]; node.InnerText=attr.Value.ToString(); node.Attributes.Remove(attr); } str=doc.InnerXml;
从@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();
string str=”“;
XElement elem=XElement.Parse(str);
变量运行=元素后代和自身(“运行”);
foreach(var磨合运行)
{
//就地修改以保留(未知)结构。
run.Value=run.Attribute(“Text”).Value;
属性(“文本”).Remove();
}
str=elem.ToString();

不错的开始,但您必须在所有运行中进行迭代/递归。@Henk是的,实际上这只是一个想法,似乎无法使子代和自身(“运行”)正常工作。如果没有“运行”,它可以工作(运行和段落的混合),但没有返回任何内容…只是测试了一下,工作正常。在问题中列出更多的测试用例。
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();