Jsoup未转义带引号元素属性值中的特殊字符(<,>)问题咨询
XML属性值包含<和>时的转义问题
我在编程构建属性值包含<和>的Element时得到了意外结果,是不是遗漏了相关规则?
测试代码如下:
Element e = new Element("E"); e.attr("key", "value"); e.attr("code", "<X>"); assertEquals("<E key=\"value\" code=\"<X>\"></E>", e.outerHtml());
测试失败,实际结果与预期不符:
expected:
<E key="value" code="<X>"></E>but was:<E key="value" code="<X>"></E>
问题解析
XML与HTML的转义规则差异:
- 严格XML语法要求属性值中的
<必须转义为<,这是强制规则;>则属于可选转义范畴。 - 你调用的
outerHtml()方法是按HTML规则输出的,在HTML规范中,属性值用双引号包裹时,<并非强制转义(浏览器可正确解析),因此库没有对其进行转义处理。
- 严格XML语法要求属性值中的
解决方案:
- 若需要严格符合XML的输出标准,不要使用HTML相关的输出方法(如
outerHtml()),改用库提供的XML序列化方法(比如asXml(),具体方法名取决于你使用的库),这样会按照XML规则自动转义<为<。
- 若需要严格符合XML的输出标准,不要使用HTML相关的输出方法(如
内容的提问来源于stack exchange,提问作者ondruska
相关产品推荐
相关产品推荐

