我对c#很新,所以这就是我在这里问的原因。
我正在使用一个返回长字符串XML值的Web服务。因为这是一个字符串,所有属性都转义了双引号
string xmlSample = "<root><item att1=\"value\" att2=\"value2\" /></root>"
这是我的问题。我想做一个简单的string.replace。如果我在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:要在原始字符串中包含引号,您需要将其加倍。
这是重要的信息,现在尝试这种方法......也没有运气 这里有双引号发生的事情。你们所建议的概念都是可靠的,但这里的问题是处理双引号,看起来我需要做一些额外的研究来解决这个问题。如果有人想出一些东西,请发一个答案。
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>"
答案 0 :(得分:21)
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>
P.S。
\
)是C#答案 1 :(得分:2)
字符串和正则表达式都使用\
进行转义。正则表达式会看到字符\
后跟"
,并认为这是一个字面上的转义。试试这个:
Regex rgx = new Regex("\\\\\"");
string strip = rgx.Replace(xmlSample, "\"");
你也可以在C#中使用原始字符串(也称为veratim字符串)。它们以@
为前缀,所有反斜杠都被视为普通字符。要在原始字符串中包含引号,您需要将其加倍。
Regex rgx = new Regex(@"\""")
string strip = rgx.Replace(xmlSample, @"""");
答案 2 :(得分:2)
根本没有理由使用正则表达式...这比你需要的要重得多。
string xmlSample = "blah blah blah";
xmlSample = xmlSample.Replace("\\\", "\"");
答案 3 :(得分:1)
如果要获取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中拥有了该元素,就可以很容易地搜索并获取该元素中的元素的值和名称。
尝试一下,在检索WebServices响应时以及在XML文件中将某些内容存储为小型应用程序的设置时,我会大量使用它。