簡體   English   中英

如何僅替換XML文檔中的特定值而不更改其他內容?

[英]How do I replace only a specific value in an XML document without changing anything else?

在創建XML的消息日志之前,我一直試圖從內存中的xml文檔替換特定值。

我已經設法進行了替換,但是Regex替換方法似乎也可以替換其他項。

我不得不使它比我想要的更時髦,但是文檔中的元素可以包含不同的XML名稱空間...

string pattern = "(<).*?(ElementName>).*?(<\\/).*?(ElementName>).*?";

string replacementPattern = "(<).*?(ReplacedElementName>)xxxxxxxxxxxxxx(<\\/).*?(ReplacedElementName>).*?";

string messageToLog = Regex.Replace(messageToSanitise, pattern, replacementPattern);

誰能指出我要去哪里了?

[更新16:11 BST 2013年9月8日]

謝謝Dash,我嘗試這樣做,但是后來我意識到該對象包含一個xml,而實際上它本身並不是xml文檔,看起來該對象具有一些標頭,並且xml位於文檔信封中。 理想情況下,我不想在記錄之前丟失任何信息(包括標題)。 我嘗試更改的元素將始終出現1或2次,並且永遠不會少於1。

給定xml在字符串messageToSantise ,您可以嘗試以下操作:

使用XmlDocument:

(經典XML解析在框架的較舊版本中很常見,而您在較舊版本上的唯一選擇)

XmlDocument messageDoc = new XmlDocument();
messageDoc.Load(messageToSanitise);
messageDoc.SelectSingleNode(path_to_node).Value = replacementValue

path_to_node可以與適當的XPath表達式一起使用。

要從XmlDocument中獲取xml字符串,請使用messageDoc.OuterXml屬性。

string messageToLog = messageDoc.OuterXml;

使用XDocument:

(通過LINQ樣式機制進行xml解析,在新版本的框架中受支持)

XDocument messageDocument = new XDocument();
messageDocument.Parse(messageToSanitise);
messageDocument.Element(path_to_element).value = replacementValue;

要瀏覽XDocument,您可能還希望使用Descendents屬性。 如何到達節點的示例包括此答案和此處的MSDN文檔

要從XDocument獲取Xml,請使用messageDocument.ToString();

string messageToLog = messageDocument.ToString();

這使您可以准確指定要替換的內容。

如果您要決定使用XmlDocument還是XDocument,建議閱讀此問題答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM