【问题标题】:Java escape XML token stringsJava 转义 XML 标记字符串
【发布时间】:2020-04-28 16:13:31
【问题描述】:

大多数字符编码的答案是 commons.text 版本中的 Apache StringEscapeUtils。同意。可用于转义 xml 标签之间的字符串。 但是如何自己转义 xml 标记呢?

允许的字符很简单:https://www.w3.org/TR/xml11/#sec-common-syn

我的用例是将数据库表转换为 XML,其中每个列名都是一个 xml 标记。

<ROW><COL1>Hello</COL1></ROW>

工作正常,但如果列名是“/BIC/COL1”怎么办?

<ROW></BIC/COL1>Hello<//BIC/COL1></ROW>

显然无效。目前我什至没有关于编码的样子的计划。需要使用 _x26BIC_x26COL1 标记名称或类似名称。

我忽略了什么?

【问题讨论】:

  • edit 您的问题包括您用于创建 XML 文档的 API。还要添加构建 XML 文档所需的当前源代码。
  • 那无济于事。我使用 olingo v4 创建 odata 文档。此外,这个问题很笼统。无论您如何创建 XML 文档,如果生成器不转义 xml 标记名称并允许任何字符串,我都必须对其进行编码。从这个意义上说,源代码是 out.println("/COL1>");
  • 这不是字符编码问题。不,我不同意 Apache 的 StringEscapeUtils 是大多数编码问题的答案。尽管在许多网络协议中有很多转义问题,但从未使用过它。否则,@Progman 的第二个建议可能是前进的方向。

标签: java xml stringescapeutils


【解决方案1】:

XML 元素标签没有字符串转义机制。当新元素的名称与元素名称的规范不匹配时,某些 API 甚至会拒绝该名称。您的问题至少有两种可能的解决方案:

  1. 您可以定义自己的转义机制,用于对元素名称进行编码和解码。例如,您可以使用 _ 作为转义序列。序列__(两个下划线)将是文字_,序列_XX_uXXXX 将是您要编写的ascii/unicode 字符。

  2. 您将列名保存在属性中。这样,您可以保存其中的每个值,甚至可以使用您选择的 XML API 以正确的编码保存值。

【讨论】:

  • 好主意。我都做了。在使用属性列表生成 odata 元数据时,我添加了一个注释,以便对于每个属性,我都知道它所属的列名。对于属性名,我使用 __uXXXX 模式。
猜你喜欢
  • 2012-08-30
  • 1970-01-01
  • 1970-01-01
  • 2010-11-11
  • 1970-01-01
  • 2014-04-16
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多