从XML名称标记中删除无效字符 - RegEx C#

Sco*_*ott 7 c# regex xml

我有一个带有xml数据的字符串,我从Web服务中提取.数据很难看,并且在xml的Name标签中有一些无效的字符.例如,我可能会看到类似的东西:

<Author>Scott the Coder</Author><Address#>My address</Address#>
Run Code Online (Sandbox Code Playgroud)

地址名称字段中的#无效.我正在寻找一个正则表达式,它将从名称标签中删除所有无效字符但是将所有字符保留在xml的Value部分中.换句话说,我想使用RegEx仅从开头名称标签和结束名称标签中删除字符.其他一切都应该保持相同.

我还没有所有无效的字符,但这会让我开始:#{}&()

有可能做我想做的事吗?

Sam*_*m B 5

如果您的目的是仅检查Xml节点名称的有效性,我建议您查看XmlConvert该类; 特别是VerifyNameVerifyNCName方法.

另请注意,使用该类,您可以使用EncodeNameEncodeLocalName方法接受任何文本作为节点名称.

使用这些方法将比执行正则表达式更容易,更安全,更快捷.


Mar*_*rco 1

我有一个简单的表单,有两个文本区域和一个按钮。这似乎可以解决问题。

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 ""; }
    }
}
Run Code Online (Sandbox Code Playgroud)