[英]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();
這使您可以准確指定要替換的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.