[英]Removing Invalid Characters from XML Name Tag - RegEx C#
我有一個帶有xml數據的字符串,我從Web服務中提取。 數據很難看,並且在xml的Name標簽中有一些無效的字符。 例如,我可能會看到類似的東西:
<Author>Scott the Coder</Author><Address#>My address</Address#>
地址名稱字段中的#無效。 我正在尋找一個正則表達式,它將從名稱標簽中刪除所有無效字符但是將所有字符保留在xml的Value部分中。 換句話說,我想使用RegEx僅從開頭名稱標簽和結束名稱標簽中刪除字符。 其他一切都應該保持相同。
我還沒有所有無效的字符,但這會讓我開始:#{}&()
有可能做我想做的事嗎?
如果你的目的只是檢查Xml節點名稱的有效性,我建議你看一下XmlConvert
類; 特別是VerifyName
和VerifyNCName
方法。
另請注意,使用該類,您可以使用EncodeName
和EncodeLocalName
方法接受任何文本作為節點名稱。
使用這些方法將比執行正則表達式更容易,更安全,更快捷。
您可以使用字符串替換來替換所有無效的字符。 通常,ascii控件字符會在XML讀取中產生問題。
避免使用此功能
public static string CleanInvalidXmlChars( this string text)
{
// From xml spec valid chars:
// #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
// any Unicode character, excluding the surrogate blocks, FFFE, and FFFF.
string re = @"[^\x09\x0A\x0D\x20-\xD7FF\xE000-\xFFFD\x10000-x10FFFF]";
return Regex.Replace(text, re, "");
}
xmlcontent = xmlcontent.CleanInvalidXmlChars();
這將清除正則表達式中指定的chracters。 我從這個網站得到這個
我有一個簡單的表單,有兩個文本區域和一個按鈕。 這似乎可以解決問題。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
namespace WindowsFormsApplication3
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Regex r = new Regex(@"(?<=\<\w+)[#\{\}\(\)\&](?=\>)|(?<=\</\w+)[#\{\}\(\)\&](?=\>)");
textBox2.Text = r.Replace(textBox1.Text, new MatchEvaluator(deleteMatch));
}
string deleteMatch(Match m) { return ""; }
}
}
除非你真的只有一個要處理的文件,否則RegEx是一個有問題的方法。 痛苦,挫折,錯誤是你的未來......
我真要使用正則表達式,也有有用的這里 ,我在Perl已經使用。
您是否考慮過使用解析器?
兩個要考慮:
一旦解析,您可以重新保存麻煩的部分或只是以您的程序方式繼續。
嘗試這個:
s = Regex.Replace(s, @"[#{}&()]+(?=[^<>]*>)", "");
如果前瞻成功,則匹配后的下一個尖括號是右指向( >
),表示匹配發生在標記內。
當然,這假設文本格式合理,並且除了標簽中的角度之外不包含尖括號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.