C-String.Ersetzen Sie doppelte Anführungszeichen und Literale

Hier ist etwas los mit den doppelten Zitaten. Die Konzepte, die Sie alle vorschlagen, sind solide, ABER das Problem hier ist der Umgang mit den doppelten Zitaten und es sieht so aus, als ob ich einige zusätzliche Forschung zu tun, um dieses Problem zu lösen. Wenn jemand mit etwas kommt, schreiben Sie bitte eine Antwort.

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>"

Ich bin ziemlich neu in c' also das ist, warum ich dies hier frage.

Ich verwende einen Webdienst, der eine lange Zeichenfolge von XML-Werten zurückgibt. Da dies eine Zeichenfolge ist, haben alle Attribute doppelte Anführungszeichen

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

Hier ist mein Problem. Ich möchte eine einfache string.replace tun. Wenn ich in PHP arbeite, würde ich einfach strip_slashes() ausführen.

Allerdings bin ich in C' und ich kann es nicht für das Leben von mir herausfinden. Ich kann meinen Ausdruck nicht schreiben, um die doppelten Anführungszeichen (") zu ersetzen, da die Zeichenfolge beendet wird. Wenn ich ihm entkomme, dann hat es falsche Ergebnisse. Was mache ich falsch?

    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: Um ein Zitat in eine unformatierte Zeichenfolge aufzunehmen, müssen Sie es verdoppeln.

Das sind wichtige Informationen, die diesen Ansatz jetzt versuchen... Auch kein Glück

Antwort auf "C-String.Ersetzen Sie doppelte Anführungszeichen und Literale " 4 von antworten

Sowohl die Zeichenfolge als auch der Regex verwendet \ for escaping. The regex will see the character zum Entweichen. Der Regex wird den Charakter \ followed by gefolgt von ", and think it's a literal escape. Try this: sehen und denken, dass es eine wörtliche Flucht ist. Probieren Sie dies aus:

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

Sie können auch unformatierte Zeichenfolgen (auch als veratim strings bezeichnet) in C' verwenden. Ihnen wird @, and all back-slashes are treated as normal characters. To include a quote in a raw string you need to double it. vorangestellt, und alle Umgekehrten werden als normale Zeichen behandelt. Um ein Anführungszeichen in eine unformatierte Zeichenfolge aufzunehmen, müssen Sie es verdoppeln.

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

Es gibt überhaupt keinen Grund, einen regulären Ausdruck zu verwenden... das ist viel schwerer als das, was Sie brauchen.

string xmlSample = "blah blah blah";

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

Wenn Sie eine XML-Zeichenfolge erhalten, warum sollten Sie nicht stattdessen XML-Zeichenfolgen verwenden?

Sie haben Zugriff auf alle Elemente und Attribute und es wird viel einfacher und extrem schnell sein, wenn Sie den System.Xml-Namespace

in Ihrem Beispiel verwenden, erhalten Sie diese Zeichenfolge:

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

Alles, was Sie tun müssen, ist diese Zeichenfolge in ein XML-Dokument zu konvertieren und sie zu verwenden, wie:

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/>";
}

in ASP.NET dies wird in der Literal1 so etwas wie :

item
att1 = value
att2 = value2

, sobald Sie das Element in einem XmlElement haben, ist es sehr einfach, die Werte und Namen für das, was in diesem Element ist, zu suchen und abzubekommen.

versuchen Sie es, ich benutze es viel beim Abrufen von WebServices-Antworten und wenn ich etwas in einer XML-Datei als Einstellungen für eine kleine Anwendung zum Beispiel speichere.

die folgende Anweisung in C-97-" speichert tatsächlich den Wert

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

, während

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

den Wert

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

für den zweiten Fall hat, müssen Sie den Schrägstrich () durch leere Zeichenfolge ersetzen, da folgen Sie

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

das Ergebnis ist

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

P.S.

  1. Schrägstrich ( \) is default escape character in C# ) ist standardmäßiges Escape-Zeichen in C-"104-", um Schrägstriche zu ignorieren, verwenden Sie am Anfang der Zeichenfolge
  2. , wenn - verwendet wird, das Escape-Zeichen ist doppeltes Anführungszeichen (")