2012-04-18 74 views
2

如何將Run的文本屬性移動到運行標記的內容。例如請記住,該字符串可能包含多個段落和多個運行(我希望所有的運行都被修改)。理想情況下,我想保留它作爲一個字符串,而不是轉換爲XML或XAML,所以也許是一個正則表達式?如果不是,我會接受轉換它。將運行文本屬性移動到元素的內容

任何幫助將非常感激。

回答

2

借用@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(); 
+0

我似乎無法得到後裔和自我(「運行」)正常工作。沒有「運行」它的作品(運行和段落的混合),但它與它沒有任何回報... – GJHix 2012-04-18 14:24:24

+0

只是測試它,工作確定。在問題中列出更多的測試用例。 – 2012-04-18 14:42:55

+0

啊別擔心。這是我成爲一個白癡:) – GJHix 2012-04-18 14:50:00

1
XElement elem = XElement.Parse(str); 
string str2 = new XElement(elem.Name, elem.Attribute("Text").Value).ToString(); 
+0

不錯的開始,但你必須在所有運行迭代/遞歸。 – 2012-04-18 13:51:51

+0

@亨克是的,這確實只是一個想法 – ionden 2012-04-18 13:52:16

0
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; 
相關問題