簡體   English   中英

使用Regex或HtmlAgilityPack替換XML字符串

[英]Replace XML String using Regex or HtmlAgilityPack

首先,首先:我很清楚使用Regex解析XML是一個壞主意。 就是說,這種XML的格式已足夠嚴重,以至於使用XML解析器將極大地改變輸出(至多),並使輸出對使用它的引擎無效。 這是第三方定義的專有規范,我無法控制。

考慮到由於范圍有限,使用Regex / XML的典型問題在這里不會成為問題,因此如何定義一個正則表達式來捕獲以下內容:

<ns:elementname attr="value">
  arbitrary data/child nodes here
</ns:elementname>

我試過了:

var tOut5 = Regex.Replace(entry, 
@"<ns:elementname(.*?)ns:elementname>", 
"", RegexOptions.Multiline);

以及其他一些變體。

使用HTMLAgilityPack,我嘗試過:

var doc = new HtmlDocument();
doc.OptionWriteEmptyNodes = true;
doc.LoadHtml(text);
var Elements = doc.DocumentNode.Descendants()
.Where(n => n.Name == "ns:elementname");

它適用於選擇節點,但是在保存輸出時,它會影響其他節點作為副產品的呈現方式。

我也歡迎其他建議,但是請記住,整個文檔中唯一可以更改的部分是此節點,並且XML格式錯誤,無法用於大多數解析器。

在Regex測試器中,這對我有用。 注意使用SingleLine,它使(。)匹配每個字符,包括換行符。

<ns:elementname(.+?)>.+?</ns:elementname>

在此處輸入圖片說明

暫無
暫無

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

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