【问题标题】:org.w3c.dom.Node.setNodeValue() not encoding certain special charactersorg.w3c.dom.Node.setNodeValue() 不编码某些特殊字符
【发布时间】:2014-08-27 05:48:27
【问题描述】:

使用Java,我将xml文件中<value>属性的值设置为

String val = "~!@#$%^&*()_+-={}|[]\\:\";'<>?,./;"

当我尝试使用带有输入的 api 时

org.w3c.dom.Node.setNodeValue(val)

看一下xml,我发现生成的xml中的value属性看起来是这样的-

<Value>~!@#$%^&*()_+-={}|[]\:";'<>?,./</Value>

我试图弄清楚为什么这个第三方 API 只编码 <&,而不是 >'"

【问题讨论】:

    标签: java xml encoding xmlnode


    【解决方案1】:

    这仅仅是因为它不需要转义>'"

    引号只需要在以相同类型引号打开的属性中进行编码(所以foo="single'quote"bar='double"quote' 很好)并且右尖括号也不需要编码,因为当您没有可能关闭元素时,它没有任何意义。

    无论如何,它对它们进行编码是完全有效的 - 但这样做也是有效的。

    【讨论】:

    • 但是如果这些字符被用作 html 标签的一部分呢?如果 value 属性包含这些特殊字符怎么办?特别是>?这不能算是一个html标签的关闭吗?
    • 我说的是我们从 xml 读取并写入 html 的情况。
    • @AlwaysALearner:你不应该期望 XML 库关心 HTML 想要什么。但坦率地说,我希望 HTML 也能接受这些。您不能在属性中途关闭元素,对吗?我知道浏览器的解析通常很宽松,但在这种情况下,我会期望有效的 XML 是有效的 HTML。
    • @AlwaysALearner 如果“
    • 那么,这是否意味着Node.setTextContent() 是正确的方法?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    • 2011-12-28
    • 2016-10-19
    • 1970-01-01
    • 2013-06-07
    相关资源
    最近更新 更多