我正在使用一些包含如下字符串的XML:
<node>This is a string</node>
我传递给节点的一些字符串将包含诸如&
、#
、$
等字符:
<node>This is a string & so is this</node>
由于&
,这是无效的。
我不能将这些字符串包装在CDATA中,因为它们需要原样。我尝试查找不在CDATA中就不能放入XML节点中的字符列表。
有没有人能给我指个方向,或者给我提供一个非法字符的列表?
发布于 2009-04-08 13:59:49
唯一非法的字符是&
、<
和>
(以及属性中的"
或'
,这取决于用于分隔属性值的字符:attr="must use " here, ' is allowed"
和attr='must use ' here, " is allowed'
)。
它们是使用XML entities进行转义的,在本例中,您需要将&
用于&
。
不过,实际上,您应该使用一个工具或库来为您编写XML,并为您抽象出这类东西,这样您就不必担心它了。
发布于 2011-02-25 04:34:52
有效字符的列表在XML specification中
Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] /* any Unicode character, excluding the surrogate blocks, FFFE, and FFFF. */
发布于 2013-01-15 01:31:18
这是一段C#代码,用于从字符串中删除XML无效字符并返回新的有效字符串。
public static string CleanInvalidXmlChars(string text)
{
// From xml spec valid chars:
// #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
// any Unicode character, excluding the surrogate blocks, FFFE, and FFFF.
string re = @"[^\x09\x0A\x0D\x20-\uD7FF\uE000-\uFFFD\u10000-\u10FFFF]";
return Regex.Replace(text, re, "");
}
https://stackoverflow.com/questions/730133
复制相似问题