English 中文(简体)
C#字符串.replace双引号和字面值
原标题:
  • 时间:2008-11-12 22:17:21
  •  标签:

我对C#相当新,所以我在这里问。

我正在使用一个返回长字符串XML值的Web服务。由于这是一个字符串,所有属性都有转义的双引号。

string xmlSample = "<root><item att1="value" att2="value2" /></root>"

这是我的问题。我想要做一个简单的字符串替换。如果我在PHP中工作,我只需运行strip_slashes()。

然而,我在C#中,我无法理解它。我无法写出替换双引号(“)的表达式,因为它将终止字符串。如果我转义它,那么结果会不正确。我做错了什么?

    string search = "\"";
    string replace = """;
    Regex rgx = new Regex(search);
    string strip = rgx.Replace(xmlSample, replace);

    //Actual Result  <root><item att1=value att2=value2 /></root>
    //Desired Result <root><item att1="value" att2="value2" /></root>

MizardX: 在原始字符串中包含引用,您需要将其加倍。

That s important information, trying that approach now...No luck there either There is something going on here with the double quotes. The concepts you all are suggesting are solid, BUT the issue here is dealing with the double quotes and it looks like I ll need to do some additional research to solve this problem. If anyone comes up with something please post an answer.

string newC = xmlSample.Replace("\"", """);
//Result <root><item att="value" att2="value2" /></root> 

string newC = xmlSample.Replace(""", " ");
//Result newC   "<root><item att= value  att2= value2  /></root>"
最佳回答

以下语句在C#中:

string xmlSample = "<root><item att1="value" att2="value2" /></root>"

将实际存储该值

<root><item att1="value" att2="value2" /></root>

而,然而

string xmlSample = @"<root><item att1=""value"" att2=""value2"" /></root>";

拥有价值

<root><item att1="value" att2="value2" /></root>

对于第二种情况,您需要将斜杠(/)替换为空字符串,如下所示

string test = xmlSample.Replace(@"", string.Empty);

结果将会是。

<root><item att1="value" att2="value2" /></root>

附言。

  1. slash () is default escape character in C#
  2. to ignore slashes, use @ at the beginning of string
  3. if @ is used, the escape character is double quote (")
问题回答

完全没有理由使用正则表达式……那比你需要的要重得多。

string xmlSample = "blah blah blah";

xmlSample = xmlSample.Replace("\", """);

字符串和正则表达式都使用进行转义。正则表达式将看到字符后跟随",并认为它是一个文字转义。试试这个:

Regex rgx = new Regex("\\"");
string strip = rgx.Replace(xmlSample, """);

你也可以在C#中使用原始字符串(也称为verbatim字符串)。它们以@为前缀,所有反斜杠被视为普通字符。要在原始字符串中包含引号,您需要将其加倍。

Regex rgx = new Regex(@"""")
string strip = rgx.Replace(xmlSample, @"""");

如果您正在获取XML字符串,为什么不使用XML而不是字符串?

你将可以访问所有元素和属性,如果使用 System.Xml 命名空间,这将非常容易和极快。

在你的例子中,你会得到这个字符串:

string xmlSample = "<root><item att1="value" att2="value2" /></root>";

你所需做的就是将该字符串转换成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 = "<hr/>" + _node.Name + "<br/>";
    for (int iAtt = 0; iAtt < _node.Attributes.Count; iAtt++)
        Literal1.Text += _node.Attributes[iAtt].Name + " = " + _node.Attributes[iAtt].Value + "<br/>";
}

在ASP.NET中,这将输出到Literal1类似于:

item
att1 = value
att2 = value2

一旦你有一个XmlElement元素,就非常容易搜索并获取该元素中存在的值和名称。

试试看,当我检索WebService响应和将某些东西存储在XML文件中作为小应用程序的设置时,我经常使用它。





相关问题
热门标签