在什么情况下角括号用反斜杠逃脱?

时间:2010-08-04 06:41:38

标签: java xml oracle web-services escaping

一个不寻常的问题 - 在什么情况下角括号用反斜杠转义?

我通过Web服务发送XML文档(作为字符串xsd类型),将其保存到数据库中,但是我看到所有XML的尖括号都用反斜杠转义,所以我想知道究竟在哪里(Java XML创建)使用DocumentBuilder和Transformer,W​​eb服务堆栈,保存到数据库,还是其他一些?)它会被转义?

示例:

目标XML:

<?xml version="1.0" encoding="UTF-8"?><Params><param name="qqq">1</param></Params>

实际结果:

\<?xml versionenter code here="1.0" encoding="UTF-8"?\>\<Params\>\<param name="qqq"\>1\</param\>\</Params\>

2 个答案:

答案 0 :(得分:2)

在合法的HTML或XML中,左尖括号字符不会以这种方式转义。在这两种格式中'<'个字符都替换为"&lt;"。具体来说,我不希望符合标准的XML构建器/序列化程序或Web服务堆栈执行此操作。

它们不会在URL中以那种方式转义。如果您足够疯狂以在网址中嵌入XML,则可以使用"%xx"编码。

我不明白为什么DBMS需要对它存储的字符数据执行此操作。

我能想到的唯一常见情况是使用'\'来转义'<',这是一些Wiki标记语言。

IMO,最可能的解释是,这是您正在使用的Web服务的一些特定于应用程序的funkiness。

答案 1 :(得分:1)

左角括号应作为实体&amp; lt; (以及任何和号作为&amp; amp;),这些都是在XML的上下文中转义。

我遇到过尖括号在正则表达式的上下文中具有不同含义的情况,并且必须像你的问题中所示那样进行转义。但是没有符合要求的XML解析器会查看该字符串并说,是的,这完全没问题。因为它不是。除非我遗漏了什么,否则那些反斜杠不应该存在。