【问题标题】:Java XMLStreamReader converts " to "Java XMLStreamReader 将 " 转换为 "
【发布时间】:2018-04-26 08:15:31
【问题描述】:

假设,我们有以下 XML

<Test> <Description> &quot;Hi&quot; </Description> </Test>

我使用 XMLStreamReader 加载这个 XML 并使用 reader 对象进行解析。当我使用阅读器的 getText() 打印解析时遇到的字符时,我看到 &amp;quot; 打印为“。虽然,”(双引号)首先不需要转义为 &amp;quot; ,我想知道为什么解析器在不需要转义时会自动进行这种转换。例如,&amp;lt;, &amp;gt; and &amp;amp; 被保留,否则生成的 XML 将无效。但是,&amp;quot; and &amp;apos; 并非如此。我必须以我收到它的方式保存描述。是否可以使用 XMLStreamReader API 做到这一点?

【问题讨论】:

  • 你需要使用XMLStreamReader来解析XML吗?
  • @Alberto 是的,实际的 XML 很大,这就是我不使用 DOM 的原因
  • 你是得到这个 XML 还是生成它?为防止特殊字符转义,这些数据应使用特殊的CDATA 标签
  • @Alberto 我从客户端得到这个 XML。它不是在本地生成的。
  • 使用XMLStreamReader 是不可能忽略字符转义的。 XMLStreamReaderImpl 类。您需要搜索一个允许您指明不想转义的实现,或者使用其他方式来实现。

标签: java xmlstreamreader


【解决方案1】:

我必须以我收到它的方式保存描述。

你不应该。就 XML 而言,&amp;quot;" 是完全相同的东西,因此无论你获得一个或另一个对你来说都无关紧要。

至于为什么会发生这种情况,XML 解析器的工作是对转义字符进行转义,以便它们向您呈现它们所指的数据。它还取消转义&amp;lt; 等等。但是,当这样获得的文本随后被序列化回 XML 时,序列化程序将再次转义诸如 &lt; 之类的字符,因为它是 XML 所要求的,但它不会打扰转义 ",因为这不是必需的。

当您经历解析 XML,然后再次序列化的过程时,您不能有“保持”原样“保留”转义的概念。这在转换中固有地丢失了。解析器只是不负责保存这些不需要的信息。但是,如果您希望您的 " 在生成的 XML 中始终转义为 &amp;quot;,您的 XML 序列化程序可能有一个选项(您没有提供有关您正在使用的内容的详细信息,所以我不能告诉您不管你能不能。)

【讨论】:

  • 我知道转义对于 " 是不必要的,并且生成的 XML 是完全有效的。我必须满足一个需要按原样存储数据的用例。我知道的唯一方法这是要求发件人不要逃跑”,我需要对此进行确认。所以我想我可以继续这个结论,对吧?
  • 计算机没有什么是不可能的,但是如果您想保留转义字符,您将需要一个提供它的 XML 解析器,这很可能意味着自己制作一个,这通常被认为是不合理的步骤。所以是的,我建议,要么放弃保留转义字符的无用要求,要么在不需要转义字符时在输入文档中不转义字符,使其变得更加无关紧要。
猜你喜欢
  • 2011-11-07
  • 2011-07-29
  • 2018-11-26
  • 2017-11-17
  • 2011-08-07
  • 2014-05-14
  • 2014-11-22
  • 2018-06-11
  • 1970-01-01
相关资源
最近更新 更多