【问题标题】:Replace Double Quotes Within Attributes only in XML : C#仅在 XML 中替换属性内的双引号:C#
【发布时间】:2016-05-12 03:19:55
【问题描述】:

我有这个字符串,它将成为 XML/XML 节点的一部分:

string a = "<Node a=\"a\"[\"\"/>";

我只需要对属性引号进行转义,使其变为

a= "Node a=\"a&qout;[&qout;\"/>";

我正在使用 C#、.NET 2.0。

【问题讨论】:

  • 我发现这篇文章很有帮助,但与我在 C# 中的解决方案无关 (stackoverflow.com/questions/33744460/…)
  • string a = "" 不编译,顺便说一句。确实如此,但是 string a = "";或者这个字符串 a = @"";
  • @KSib 谢谢,我已经更新了这个问题。我需要转义的不是字符串双引号转义,而是属性的 XML 双引号转义。
  • 您也将很难验证这一点,因为它一开始就不是有效的 XML。我假设这只是一个测试用例,而您实际上想要对更大的 XML 文档执行此操作?
  • @KSib 例如,我刚刚给出了部分 XML 以使问题变得简单。假设这是一个节点。

标签: c# regex xml string escaping


【解决方案1】:

您找到的链接是正确的,它只需要适应 C#。

这是转换:

using System;
using System.Collections.Generic;
using System.Text;

namespace RegEx
{
    class Program
    {
        static void Main(string[] args)
        {
            string text = "<Node a=\"a\"[\"\" b=\"b\"[\"\"/>   <Node2 a=\"a\"[\"\" b=\"b\"[\"\"/>";
            string regEx = "(\\s+[\\w:.-]+\\s*=\\s*\")(([^\"]*)((\")((?!\\s+[\\w:.-]+\\s*=\\s*\"|\\s*(?:/?|\\?)>))[^\"]*)*)\"";
            StringBuilder sb = new StringBuilder();

            int currentPos = 0;
            foreach(System.Text.RegularExpressions.Match match in System.Text.RegularExpressions.Regex.Matches(text, regEx)) {
                sb.Append(text.Substring(currentPos, match.Index - currentPos));
                string f = match.Result(match.Groups[1].Value + match.Groups[2].Value.Replace("\"", "&quot;")) + "\"";
                sb.Append(f);
                currentPos = match.Index + match.Length;
            }

            sb.Append(text.Substring(currentPos));

            Console.Write(sb.ToString());
        }
    }
}

【讨论】:

  • 谢谢,但不适用于以下内容。你能帮我吗?字符串文本 = "";
  • 基本上当括号存在时。
  • 不,这是由于属性的“=”符号周围有空格。我更正了。
  • 谢谢,但是你能帮我解决空间问题吗?在我的测试用例中,“=”周围存在一个空格。感谢您的帮助。
  • 如果没问题别忘了接受答案。更重要的是,我为您发布了有关在列表中查找的问题的答案。
猜你喜欢
  • 1970-01-01
  • 2013-01-30
  • 1970-01-01
  • 2016-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-04
  • 1970-01-01
相关资源
最近更新 更多