【问题标题】:Java XML Document converting " to "(literal quote) upon parsing/converting to DocumentJava XML 文档在解析/转换为文档时将“转换为”(文字引用)
【发布时间】:2021-06-25 04:26:44
【问题描述】:

我有这个问题,我需要发送到需要根标记具有 xml 数据的soap webservice,这是我要发送的 xml:

<root>&lt;test key=&quot;Applicants&quot;&gt;this is a data&lt;/test&gt;</root>

我需要将此代码作为文档附加到 SoapBody 对象中:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
factory.setNamespaceAware(true); 
factory.setExpandEntityReferences(false); 

DocumentBuilder builder = factory.newDocumentBuilder(); 
Document result = builder.parse(new ByteArrayInputStream(request.getRequest().getBytes()));

然后将其添加到 SoapBody 以发送到 Web 服务。

但是,在发送此请求并跟踪日志时,它实际上是在还原“”字符到文字引号 (")

这是正在发送的 xml:

<root>&lt;test key="Applicants"&gt;this is a data&lt;/test&gt;</root> 

如您所见," 正在转换为文字引号,我怎样才能将原始数据保留在根标记中(其中有 ")?当我将其转换为文档时,它似乎正在转换它对象。

不胜感激。谢谢。

编辑:

Web 服务实际上需要这种格式(来自他们的文档和示例 xml 请求),如果这不可能,是否有限制?我应该使用其他框架吗?

【问题讨论】:

  • 只有在属性值中才需要转义引号。作为标签之间的文本,它们不需要转义,因此结果是完全有效的 XML。没有什么可修复的,因为没有什么问题。
  • 如果是webservice的要求怎么办,应该转换成" (如他们的文档和示例 xml 请求中所写)?这是一个限制吗?谢谢。
  • 所有 XML 解析器都会以完全相同的方式解析 &amp;quot;"。通常对属性和文本使用统一的 XML 编码器,因此它们将 " 转义为 &amp;quot;,但这只是方便。标签之间的文本不需要转义,但可以这样做。忽略这个问题,它会正常工作的。

标签: java xml


【解决方案1】:

"&amp;quot; 在这种情况下是完全等价的。您实际上并没有说这是否会导致问题:如果是,那是因为 XML 的某些接收者没有正确处理它。顺便说一句,将&amp;gt; 转换为&gt; 也是合法的。

当您解析 XML 并重新序列化它时,多余的空格等不相关的细节会丢失 - 就像您将此文本复制到文本编辑器中一样,换行和字体大小也会丢失。

【讨论】:

    猜你喜欢
    • 2010-12-15
    • 2017-02-17
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-06
    相关资源
    最近更新 更多