如何转义xml中的特殊字符

如何转义xml中的特殊字符,第1张

XML实体中不允许出现"&","<",">"等特殊字符,否则XML语法检查时将出错,如果编写的XML文件必须包含这些字符,则必须分别写成"&","<",">"再写入文件中。例如,如果在XML文档中使用类似"<"

的字符,

那么解析器将会出现错误,因为解析器会认为这是一个新元素的开始。所以不应该像下面那样书写代码:

[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节点里面排除一下,其实我是解析不了的时候才调这个重新转义一遍的,一般不走这里,链路不要长。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12083105.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存