【问题标题】:Expressing markup in Java XML property files: CDATA vs. escaped tags在 Java XML 属性文件中表达标记:CDATA 与转义标记
【发布时间】:2010-02-03 04:24:03
【问题描述】:

我正在读写 XML 格式的 Java 属性文件。许多属性值都嵌入了 HTML,开发人员将其包装在 [[CDATA 元素中,如下所示:

<entry key="foo"><![CDATA[
    <b>bar</b>
]]></entry>

但是,当我使用 Java API 加载这些属性并稍后将它们写回 XML 时,它不会将这些条目包装在 CDATA 元素中,而是转义标签,如下所示:

<entry key="foo">&lt;b&gt;bar&lt;/b&gt;</entry>

这两种格式是否等效?我是否通过用转义标签替换 CDATA 引入了任何潜在问题?

【问题讨论】:

    标签: java xml properties


    【解决方案1】:

    不等价,但调用getText()得到的文本值是一样的。

    但是,我建议您放弃 Properties,转而使用 JAXB 解析的真实 XML - 这太棒了,您会喜欢的。

    没有找到任何好的,所以至少这些:

    对象 -> XML:here

    Sun的详细教程:http://java.sun.com/webservices/docs/2.0/tutorial/doc/JAXBUsing.html

    【讨论】:

    • 这些是本地化文件,所以我没有任何改变格式的动机,但感谢您的回答!
    • 属性格式是专有的,只允许映射语义(甚至不保持顺序)。属性 API 很糟糕而且很麻烦。 XML 是一种广泛传播的标准,拥有数百种工具,并且可以原生地处理树结构。为什么任何人都应该将 .properties 用于已经绑定到它们的最基本的只读内容,例如 log4j 配置等?
    • 是的,XML 格式比 .properties 更适合翻译,因为您不必转义 Unicode,而且您不必担心文件编码会混乱。
    【解决方案2】:

    当文件在 Properties 对象中加载到内存中时,您显示的两种格式之间没有区别,正如 Ondra Žižka 的回答一样。 CDATA 节是一种转义文本块的方法,而不是转义其中的每个字符。

    我自己会考虑非 xml 属性文件格式,您将继续在原始文件中看到标签,但需要对换行符进行转义。

    【讨论】:

      【解决方案3】:

      是的,您可能会引发一些问题,具体取决于数据的使用方式。

      例如,如果您在 HTML 页面中使用它,A&amp;lt;br&amp;gt;B 将打印为

      A
      
      B
      

      A&amp;lt;br&amp;gt;B 会显示为

      A<br>B
      

      【讨论】:

      • 这是真的。但是,它与原始问题并没有真正的关系。
      猜你喜欢
      • 2013-11-03
      • 2012-08-08
      • 1970-01-01
      • 2011-12-08
      • 1970-01-01
      • 1970-01-01
      • 2013-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多