的字符,
那么解析器将会出现错误,因为解析器会认为这是一个新元素的开始。所以不应该像下面那样书写代码:
[html]
view
plain
copy
<age>
age
<
30
</age>
为了避免出现这种情况,必须将字符"<"
转换成实体,像下面这样:
<age>
age
<
30
</age>
在读取的时候,解析器会自动将其转换回"&","<",">"等特殊字符,正常来说,只有"<"
字符和"&"字符对于XML来说是严格禁止使用的。
需要注意的是:
a.
转义序列各字符间不能有空格;
b.
转义序列必须以";"结束;
c.
单独的&不被认为是转义开始;
d.
区分大小写。
以下是XML中需要的转义字符:
&(逻辑与)
&
<(小于)
<
>(大于)
>
"(双引号)
"
'(单引号)
'
#region XML转义字符处理/// <summary>
/// XML转义字符处理
/// </summary>
public static string ConvertXml(string xml)
{
xml = (char)1 + xml //为了避免首字母为要替换的字符,前加前缀
for (int intNext = 0true)
{
int intIndexOf = xml.IndexOf("&", intNext)
intNext = intIndexOf + 1 //避免&被重复替换
if (intIndexOf <= 0)
{
break
}
else
{
xml = xml.Substring(0, intIndexOf) + "&" + xml.Substring(intIndexOf + 1)
}
}
for (true)
{
int intIndexOf = xml.IndexOf("<")
if (intIndexOf <= 0)
{
break
}
else
{
xml = xml.Substring(0, intIndexOf) + "<" + xml.Substring(intIndexOf + 1)
}
}
for (true)
{
int intIndexOf = xml.IndexOf(">")
if (intIndexOf <= 0)
{
break
}
else
{
xml = xml.Substring(0, intIndexOf) + ">" + xml.Substring(intIndexOf + 1)
}
}
for (true)
{
int intIndexOf = xml.IndexOf("\"")
if (intIndexOf <= 0)
{
break
}
else
{
xml = xml.Substring(0, intIndexOf) + """ + xml.Substring(intIndexOf + 1)
}
}
return xml.Replace(((char)1).ToString(), "")
}
#endregion
一般,我们要求上游传xml格式字符串时直接给转义好,或者允许含特殊字符的节点增加CDATA包围,但是总有那么一些管杀不管埋的伙伴,你能不能解析是你的事。所以,这里我们将xml串中指定skuName节点里面排除一下,其实我是解析不了的时候才调这个重新转义一遍的,一般不走这里,链路不要长。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)