在C#

时间:2015-07-23 07:08:16

标签: c# xml string escaping

我试图将Parameter元素的'Id'属性括在双引号中。我首先试图简单地逃避引用,这是我试图实现的第一件事:

buffer = String.Format("{0}" + "<Parameter Id=" + "{1}" + ">" + "{2}" + "</Parameter>", buffer, id, param);

使用上面的代码我得到了回复,因为你可以看到转义字符和引号一起显示:

<Conquest><User>ArchElf</User><Token>0123456789012345678901234567890</Token><Command>validate</Command><Parameter Id=\"1\">Gemstone3</Parameter>

我的第二次尝试基于我在IRC收到的建议,一位同事建议我可以使用'“'来获取我的报价,ala:

buffer = String.Format("{0}" + "<Parameter Id=" + "&quot;" + "{1}" + "&quot;" + ">" + "{2}" + "</Parameter>", buffer, id, param);

此方法仅在最终结果中产生文字'“'字符串:

<Conquest><User>ArchElf</User><Token>0123456789012345678901234567890</Token><Command>validate</Command><Parameter Id=&quot;1&quot;>Gemstone3</Parameter>

在绝望中我继续前进,只是添加了字符串中的文字双引号。

我这样做是因为我在This Codeproject Article读到我需要担心转义的String.Format中唯一的字符是花括号和(惊讶,惊讶)这甚至不能编译,WITH并没有前面的@。向我大喊一堆错误,包括:

只有赋值,调用,递增,递减,等待和新对象表达式才能用作语句 ;预期 )预期 ......等等

对此事的任何帮助将不胜感激。我知道这必须是我想念的小事,最好的难题。 :/

以下是整个BuildCommand方法:

public string BuildCommand(string _command, string[] _parameters = null)
    {
        int id = 1;
        string buffer = String.Format("<Conquest><User>"+"{0}"+"</User><Token>"+"{1}"+"</Token><Command>"+"{2}"+"</Command>", _playerName, _token, _command);
        if (_parameters != null)
        {
            foreach (string param in _parameters)
            {
                if (param.Length < 1 || param == null)
                    break;
                buffer = String.Format("{0}" + "<Parameter Id=" + "{1}" + ">" + "{2}" + "</Parameter>", buffer, id, param);

                // buffer = String.Format(@"""{0}""<Parameter Id=""{1}"">""{2}""</Parameter>", buffer, id, param);
                id += 1;
            }
        }

2 个答案:

答案 0 :(得分:1)

您必须使用"转义\

String.Format("\"{0}\"<Parameter Id=\"{1}\">\"{2}\"</Parameter>", buffer, id, param);

您也可以使用逐字字符串文字,然后必须使用双引号:

String.Format(@"""{0}""<Parameter Id=""{1}"">""{2}""</Parameter>", buffer, id, param);

答案 1 :(得分:1)

你可以用正确的方式做到这一点

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            //<Conquest><User>ArchElf</User><Token>0123456789012345678901234567890</Token><Command>validate</Command><Parameter Id=\"1\">Gemstone3</Parameter>

            string user = "ArchElf";
            string token = "0123456789012345678901234567890";
            string command = "validate";
            int id = 1;
            string value = "Gemstrone3";
            XElement conquest = new XElement("Conquest");

            conquest.Add(new XElement("User", user));

            conquest.Add(new XElement("Token", token));

            conquest.Add(new XElement("Command", command));

            XElement e_parameter = new XElement("Parameter", value);
            e_parameter.Add(new XAttribute("Id", id));
            conquest.Add(e_parameter);
        }
    }
}
​