C#String.Replace双引号和文字
我对c#很新,所以这就是我在这里问的原因。
我正在使用一个返回长字符串XML值的Web服务。 因为这是一个字符串,所有属性都转义了双引号
string xmlSample = ""
这是我的问题。 我想做一个简单的string.replace。 如果我在PHP中工作,我只需要运行strip_slashes()。
但是,我在C#,我不能为我的生活弄清楚。 我不能写出我的表达式来替换双引号(“),因为它终止了字符串。如果我逃避它,那么它的结果不正确。我做错了什么?
string search = "\\\""; string replace = "\""; Regex rgx = new Regex(search); string strip = rgx.Replace(xmlSample, replace); //Actual Result //Desired Result
MizardX:要在原始字符串中包含引号,您需要将其加倍。
这是重要的信息,现在尝试这种方法……没有运气。这里有双引号发生的事情。 你们所建议的概念都是可靠的,但这里的问题是处理双引号,看起来我需要做一些额外的研究来解决这个问题。 如果有人想出一些东西,请发一个答案。
string newC = xmlSample.Replace("\\\"", "\""); //Result string newC = xmlSample.Replace("\"", "'"); //Result newC ""
C#中的以下语句
string xmlSample = " "
实际上会存储该值
而
string xmlSample = @" ";
有价值的
对于第二种情况,您需要用空字符串替换斜杠(),如下所示
string test = xmlSample.Replace(@"\", string.Empty);
结果将是
PS
- 斜杠(
\
)是C#中的默认转义字符 - 要忽略斜杠,请在字符串的开头使用@
- 如果使用@,转义字符是双引号(“)
根本没有理由使用正则表达式……这比你需要的要重得多。
string xmlSample = "blah blah blah"; xmlSample = xmlSample.Replace("\\\", "\"");
字符串和正则表达式都使用\
来进行转义。 正则表达式将看到字符\
后跟"
,并认为它是一个字面上的逃脱。试试这个:
Regex rgx = new Regex("\\\\\""); string strip = rgx.Replace(xmlSample, "\"");
您还可以在C#中使用原始字符串(也称为veratim字符串)。 它们以@
为前缀,所有反斜杠都被视为普通字符。 要在原始字符串中包含引号,您需要将其加倍。
Regex rgx = new Regex(@"\""")
string strip = rgx.Replace(xmlSample, @"""");
如果要获取XML字符串,为什么不使用XML而不是字符串?
您将可以访问所有元素和属性,如果使用System.Xml命名空间,它将更加容易和极快
在您的示例中,您将获得此字符串:
string xmlSample = " ";
您需要做的就是将该字符串转换为XML文档并使用它,如:
System.Xml.XmlDocument xml = new System.Xml.XmlDocument(); xml.LoadXml(xmlSample); System.Xml.XmlElement _root = xml.DocumentElement; foreach (System.Xml.XmlNode _node in _root) { Literal1.Text = "
" + _node.Name + "
"; for (int iAtt = 0; iAtt < _node.Attributes.Count; iAtt++) Literal1.Text += _node.Attributes[iAtt].Name + " = " + _node.Attributes[iAtt].Value + "
"; }
在ASP.NET中,这将输出到Literal1,如:
item att1 = value att2 = value2
一旦你在XmlElement中拥有了该元素,就很容易搜索并获取该元素中的元素的值和名称。
试一试,我在检索WebServices响应时使用它很多,并且当我将某些东西存储在XML文件中作为小应用程序的设置时。