string escape into XML-Attribute

后端 未结 3 1123
别跟我提以往
别跟我提以往 2021-02-20 11:00

I had a look at string escape into XML and found it very useful.

I would like to do a similar thing: Escape a string to be used in an XML-Attribute.

The string m

3条回答
  •  北海茫月
    2021-02-20 11:23

    Modifying the solution you referenced, how about

    public static string XmlEscape(string unescaped)
    {
        XmlDocument doc = new XmlDocument();
        var node = doc.CreateAttribute("foo");
        node.InnerText = unescaped;
        return node.InnerXml;
    }
    

    All I did was change CreateElement() to CreateAttribute(). The attribute node type does have InnerText and InnerXml properties.

    I don't have the environment to test this in, but I'd be curious to know if it works.

    Update: Or more simply, use SecurityElement.Escape() as suggested in another answer to the question you linked to. This will escape quotation marks, so it's suitable for using for attribute text.

    Update 2: Please note that carriage returns and line feeds do not need to be escaped in an attribute value, in order for the XML to be well-formed. If you want them to be escaped for other reasons, you can do it using String.replace(), e.g.

    SecurityElement.Escape(unescaped).Replace("\r", "
").Replace("\n", "
    ");
    

    or

    return node.InnerXml.Replace("\r", "
").Replace("\n", "
    ");
    

提交回复
热议问题