如何正确使用双引号?

时间:2011-10-03 21:20:06

标签: c# xml vb.net

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

在C#中是否有任何stringXml命令或在字符串中使用双引号的其他方式?

谢谢!


解决了
 XmlTextWriter

谢谢大家!

10 个答案:

答案 0 :(得分:4)

C#中的字符串文字不支持嵌入式换行符。尝试:

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

您的问题似乎与您使用引号无关。

答案 1 :(得分:1)

在C#中使用引号时,您可以使用反斜杠\"来转义它们,就像您尝试过的那样。

但是,当您将字符串拆分为多行时,请尝试使用@标记字符串的备用路径,然后将引号加倍以进行正确的转义。

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

有几种方法可以做到这一点。

以目前的方式尝试这样做,它将无法正常工作。您正在尝试将换行符放入常量字符串中。您必须将其重写为:

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

注意每行末尾的额外+'以及每行是如何自己的字符串常量。

我认为在这种情况下使用String.Format可能更容易:

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

答案 4 :(得分:1)

另一个选择是使用XElement和XAttribute类,这些类在VB和C#中都有效:

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();

答案 5 :(得分:0)

报价在c#中被转义为:\",例如timestamp="0",双引号应为timestamp=\"\"0\"\"

答案 6 :(得分:0)

尝试使用双引号,就像在vb中一样,但是在@

开始你的字符串定义
string myString = @"<xml attribute=""my attribute""/>";

您可以查看此链接,查看scape双引号的其他方法:http://weblogs.sqlteam.com/mladenp/archive/2008/10/21/Different-ways-how-to-escape-an-XML-string-in-C.aspx

答案 7 :(得分:0)

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

答案 8 :(得分:0)

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

答案 9 :(得分:0)

正如Greg Hewgill所说,你在c#版本的字符串中有换行符。

你真的应该在这里使用String.Format,但要回答你的问题,你的代码应该是这样的:

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

作为String.Format调用,它将是:

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