2012-08-08 38 views
1

我有一個字符串,其中包含一個公平的XML位,它實際上是描述一個word文檔(document.xml)的xml。我想簡單地用一個空字符串替換一部分字符串,從字符串中有效地刪除它。這聽起來很直接,但我沒有得到我期望的結果。在xml中簡單的字符串替換

下面是一些XML的樣子,這只是第10行:

<w:body xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"> 
    <w:p w:rsidR="00CB3A3E" w:rsidP="00257CF7" w:rsidRDefault="008C1E91"> 
     <w:pPr> 
      <w:pStyle w:val="Heading-Title" /> 
     </w:pPr> 
     <w:r> 
      <w:t>References</w:t> 
     </w:r> 
    </w:p> 
    <w:sdt> 

正如我所說的,這是一個字符串。我只是嘗試用空字符串替換<w:t>References</w:t>。我這樣做:

//xmlBody is the string that is holding the xml 
xmlBody.Replace("<w:t>References</w:t>", " "); 

這是行不通的,當我這樣做時字符串是不變的。我究竟做錯了什麼?任何意見將不勝感激,非常感謝!

+1

請嘗試使用正確的XML對象來操作XML。首先,您不會以這種方式生成invalud XML,其次,您會發現可能位於文本或類似文本的分隔線上,從而避免詢問「如何使用正則表達式解析/搜索XML」。 – 2012-08-08 19:34:53

回答

3
xmlBody = xmlBody.Replace("<w:t>References</w:t>", ""); 

Replace函數不會更改源字符串;它會返回一個新的字符串,並進行更改。事實上,C#字符串不能更改。如果你看看documentation,它說它們是不可變的。

2

與string.replace返回一個新字符串,它不會改變原始字符串

嘗試

xmlBody = xmlBody.Replace("<w:t>References</w:t>", " "); 
1

更換不是一個內聯替換......它返回一個新字符串替換製作。

3

在C#中,字符串是不可變的 - 一旦創建,它不能被改變。 Replace返回一個新的字符串實例。因此,你需要捕捉它的返回值:

xmlBody = xmlBody.Replace("<w:t>References</w:t>", " "); 

一點題外話,它不被視爲一個很好的做法來解析正則表達式的基於XML的字符串,因爲它太脆弱。考慮使用XDocument或其他一些來移除你之後的元素。