2011-10-03 9 views
1
This form works in VB .NET 

sendMsg = "<CStatus timestamp=""0"" " & _ 
        "type=""login"" " & _ 
        "cid = """ & cID & """ " & _ 
        "key=""" & loginKey & """ />" 

하지만 C#이중 따옴표를 올바르게 사용하는 방법?

sendMsg = "<CStatus timestamp=\"0\" 
        type=\"login\" 
        cid=\"" + cID + "\" 
        key=\"" + loginKey + "\" />"; 

같은 효과를주지 않는다

출력으로 원하는 :

<CStatus timestamp="0" type="login" cid="var_cid" key="var_key"/>; 

거기에 모든 stringXml C#에서 명령 또는 문자열에서 큰 따옴표를 사용하는 다른 방법?

감사합니다!


로 해결
 XmlTextWriter 

모두에게 감사드립니다!

+0

'String.Format'과'Verbatim Strings'을 사용하십시오. – fardjad

+0

문자열에 큰 따옴표를 사용하려고합니다. – Racooon

답변

1

또 다른 옵션은 VB 및 C#에서 모두 작동합니다 XElement를하고 XAttribute 클래스를 사용하는 것입니다 :

나는 그냥이 경우 및 String.format를 사용하는 것이 더 쉬울 수 있다고 생각

string cID = "blah"; 
string loginKey = "foo"; 

var xml = new XElement("CStatus", 
       new XAttribute("timestamp", "0"), 
       new XAttribute("type", "login"), 
       new XAttribute("cid", cID), 
       new XAttribute("key", loginKey) 
     ); 

string sendMsg = xml.ToString(); 
0

지수는 C#에서 다음과 같이 이스케이프 : 큰 따옴표 예를 들어 \", timestamp="0" 당신이 시도로 timestamp=\"\"0\"\"

1

C#에서 따옴표를 사용하여, 당신은 백 슬래시 \"로 탈출 할 수 있어야합니다.

그러나 여러 줄에 문자열을 분할 할 때는 @으로 문자열을 표시하는 대체 경로를 시도한 다음 올바른 이스케이프를 위해 따옴표를 두 번 사용하십시오.

string theString = @"<CStatus timespamp=""0"" 
           type=""login"" 
        />"; // fill in the rest 
4

C#에서는 문자열 리터럴에 포함 된 개행 문자가 지원되지 않습니다. 시도하십시오 :

sendMsg = "<CStatus timestamp=\"0\" " + 
        "type=\"login\" " + 
        "cid=\"" + cID + "\" " + 
        "key=\"" + loginKey + "\" />"; 

인용 부호 사용과 관련된 문제는 아닙니다.

+0

출력으로 제공합니다. Racooon

+0

* * 출력으로주는 것은 무엇입니까? 문자열을 쓰는 방법을 표시하지 않았습니다. 아마도 문자열을 쓰는 데 사용하는 메서드가 따옴표를 다시 이스케이프합니다. –

+0

나는 어떤 방법도 사용하지 않는다. 나는 VB에서 그것을 얻을 수 있지만 .net에서는 그렇지 않다. – Racooon

0

당신이 VB에서와 큰 따옴표를 사용하여 시도하지만,

string myString = @"<xml attribute=""my attribute""/>"; 

당신은 큰 따옴표 촉각 근 다른 방법을 보려면이 링크를 확인하실 수 있습니다 @ 당신의 문자열 정의 파크를 시작 http://weblogs.sqlteam.com/mladenp/archive/2008/10/21/Different-ways-how-to-escape-an-XML-string-in-C.aspx

+0

아직 기사를 읽고 있습니다. 최대한 빨리 답변 드리겠습니다 – Racooon

0
sendMsg = "<CStatus timestamp=\"0\" " + 
        "type=\"login\" " + 
        "cid=\"" + cID + "\" + 
        "key=\"" + loginKey + "\" />"; 
0
sendMsg = @"<CStatus timestamp=""0"" type=""login"" cid=""" + cID + """ key=""" + loginKey + """ />"; 
1
String.Format(@"<CStatus timestamp=""0"" 
         type=""login"" 
         cid=""{0}"" 
         key=""{1}"" />", cID, loginKey); 
0

Greg Hewgill이 말했듯이 C# 버전의 문자열에는 개행 문자가 있습니다.

당신은 정말 같은 코드가 보일 것입니다 여기 및 String.format를 사용해야하지만, 귀하의 질문에 대답하려면 다음 및 String.format 통화로

sendMsg = "<CStatus timestamp=\"0\" + 
        "type=\"login\"" + 
        "cid=\"" + cID + "\"" + 
        "key=\"" + loginKey + "\" />"; 

, 그것은 다음과 같습니다

sendMsg = String.Format(@"<CStatus timestamp=""{0}"" 
     type=""{1}"" 
     cid=""{2}"" 
     key=""{3}""/>", 0, login, cID, loginKey);   
+1

리터럴 문자열의 따옴표는 두 개의 따옴표를 사용해야합니다. 그렇지 않으면 열린 리터럴 문자열의 끝이라고 생각됩니다 – villecoder

+0

@ villecoder, 감사합니다 :) – IanNorton

1

당신이 이것을 할 수있는 몇 가지 방법이 있습니다.

현재 시도하고있는 방식으로는 작동하지 않습니다. 상수 문자열에 개행을 넣으려고합니다.당신은 그것을 다시 작성해야 할 것 :

sendMsg = "<CStatus timestamp=\"0\" " + 
       "type=\"login\" " + 
       "cid=\"" + cID + "\" " + 
       "key=\"" + loginKey + "\" />"; 

공지 사항 추가 + 's를 모든 라인의 끝과 방법을 각 라인은 자신의 캐릭터가 일정에서.

sendMsg = String.Format("<CStatus timestamp=\"0\" type=\"login\" cid=\"{0}\" key=\"{1}\" />", 
       cID, loginKey); 
관련 문제