【发布时间】:2019-09-03 13:44:24
【问题描述】:
我想发送下面的 XML 请求。文本内容应该被转义,而不是标签。
我已尝试使用以下转义逻辑。String str = escapeXml11(req);
但是,我的整个请求都被逃脱了。因此,它不再是有效的 XML。
我的原始字符串:
String req =
"<request>\r\n"
+ " <Products>\r\n"
+ " <Product>\r\n"
+ " <ProductName>H < M</ProductName>\r\n"
+ " <quantity>1</quantity>\r\n"
+ " <totalProductCost>17.03</totalProductCost>\r\n"
+ " </Product>\r\n"
+ " </Products>\r\n"
+ "</request>";
转义后:
<request>
<ProductName>H < M</ProductName>
<quantity>1</quantity>
<totalProductCost>17.03</totalProductCost>
</request>
预期结果:
<request>
<ProductName>H < M</ProductName>
<quantity>1</quantity>
<totalProductCost>17.03</totalProductCost>
</request>
如何只转义文本内容?
【问题讨论】:
-
构建 XML 后无法转义值,因为未转义值的 XML 字符串 不是有效的 XML,因此您不会能够正确解析它以将值与标签分开。您需要在构建 XML 时转义各个值字符串。另外,我建议研究一下 Jackson 之类的东西,而不是手动构建 XML。
-
感谢乔丹的建议。我从第三方收到这个请求 XML 字符串,它是字符串格式的。我想将此字符串用作有效的 XML。
-
嗯,那就有问题了。因为第 3 方发送给您的是非有效的 XML,他们绝对应该正确地转义值。恐怕我不知道有任何特定工具可以修复格式错误的 XML。但这并不意味着它们不存在!
-
你称它为 XML 字符串,但它不是。您需要澄清您与第三方的合同:如果您同意以 XML 格式交换数据,那么他们将不得不更改其代码以使其成为有效的 XML。如果您同意其他格式,那么您有责任。如果您不同意交换的规范,那么双方都需要从错误中吸取教训。
标签: java xml special-characters