如何將Run的文本屬性移動到運行標記的內容。例如請記住,該字符串可能包含多個段落和多個運行(我希望所有的運行都被修改)。理想情況下,我想保留它作爲一個字符串,而不是轉換爲XML或XAML,所以也許是一個正則表達式?如果不是,我會接受轉換它。將運行文本屬性移動到元素的內容
任何幫助將非常感激。
如何將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();
不錯的開始,但你必須在所有運行迭代/遞歸。 – 2012-04-18 13:51:51
@亨克是的,這確實只是一個想法 – ionden 2012-04-18 13:52:16
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;
我似乎無法得到後裔和自我(「運行」)正常工作。沒有「運行」它的作品(運行和段落的混合),但它與它沒有任何回報... – GJHix 2012-04-18 14:24:24
只是測試它,工作確定。在問題中列出更多的測試用例。 – 2012-04-18 14:42:55
啊別擔心。這是我成爲一個白癡:) – GJHix 2012-04-18 14:50:00