使用.NET中的正则表达式替换XML内容

时间:2011-04-23 01:33:50

标签: .net xml regex

我正在尝试使用正则表达式替换C#中的XML内容,但没有成功。

以下是带有XML示例的示例代码。

     static void Main(string[] args)
    {
        Console.Write(ReplaceValue("<test val='123'><this>something</this></test>", "ANY_XML_BLOB", @"<test[^>]*>\s*(?'value'[^</test]*)"));
    }

    static string ReplaceValue(string request, string newFieldValue, string pat)
    {
        string value = String.Empty;
        Regex conditionRex = new Regex(pat, RegexOptions.IgnoreCase | RegexOptions.Compiled);
        Match match = conditionRex.Match(request);
        if(match.Success)
        {
           value = match.Groups["value"].Value;
           return request.Replace(value, newFieldValue);
        }
        return request;
    }
}

预期输出为“this”标记,所有子内容均替换为ANY_XML_BLOB一词。

任何帮助解决这个问题都将受到赞赏。

谢谢!

2 个答案:

答案 0 :(得分:1)

我建议使用适当的XML解析器来尝试做你想做的事情。使用正则表达式只是在寻找麻烦。 System.Xml命名空间中的某些内容适合您。您甚至可以尝试LINQ to XML

伪码:

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("<test val='123'><this>something</this></test>");

XmlNodeList testelelist = xmlDoc.GetElementsByTagName("test");
XmlNode testele = testelelist.Item(0);
testele.InnerText = "ANY_XML_BLOB";

答案 1 :(得分:1)

虽然我建议遵循XML解析路由,但您可以尝试这样做:

string output = Regex.Replace(input, "<this>.*?</this>", "ANY_XML_BLOB");