将包含 &#38 的 XML 值节点保存到数据库中的正确方法是啥?

Posted

技术标签:

【中文标题】将包含 &#38 的 XML 值节点保存到数据库中的正确方法是啥?【英文标题】:Which is the proper way to save XML value node that contains &#38 into the database?将包含 &#38 的 XML 值节点保存到数据库中的正确方法是什么? 【发布时间】:2021-09-06 10:21:28 【问题描述】:

今天有人向我的 asp.net 4.8 后端应用程序发送了一个 XML,如下所示:

<person>
   <name>example1 &amp;#38 example2</name>
</person>

服务器应用程序读取节点值并将其保存在 sql db 列 dbo.Person.Name 中,无需任何解码。第一个配音:不好吗?应该如何存放?应该先解码。

无论如何假设该值将按原样保存,应用程序的客户端部分迟早会从服务器请求数据,并且该字符串将被发送到客户端并正确显示,因为它是一个 html 编码字符串。

我正在处理的问题是当客户端在发布请求中将此数据返回给服务器时引发的验证异常。

为什么应该替换/转义帖子正文中包含的“&”。

这是最好的处理方式吗?服务器和客户端之间应该如何传输数据?

【问题讨论】:

如果我有一个名为“dbo.Person.Name”的列,我不希望它包含任何 XML。它应该只包含该人的原始姓名。为什么要在那里存储 XML? 起初,我想,按原样存储。 &#38;是“&”的十六进制代码,但由于字符“&”标识了一个字符实体,因此它被正确地转义以供 XML(非人类)解析器读取。然后我意识到你错过了尾随的“;”分号,我想你会在浏览器中出现“&38”。看起来有人写了自己的 XML 解析器,并且不正确地转义了“&”,通常只是简单的“&” mason,我不存储xml,只存储xml“名称”节点的内部值 如果您存储在数据库中的数据不打算是 XML,那么您为什么要像它一样对其进行编码? William Walseth,你对失踪角色的看法是正确的。无论如何,它已作为 & 保存到数据库中......从客户端我发现在将数据发布回服务器之前调用此函数,它似乎工作 $("").html(this. name).text() - 你认为这可能是正确的解决方案吗? 【参考方案1】:

“今天有人发送了一个 XML”

回到他们那里,问他们为什么要发送如此肮脏的数据,并告诉他们你还没有准备好将这样的垃圾放入数据库。

从表面上看,&amp;amp;#38 似乎是一次完全失败的逃避 & 符号的尝试。

【讨论】:

先生,这是最终答案还是有办法准备?有什么建议吗?当然,我已经明白 xml 是错误的。因此,解决该问题的唯一方法似乎是搜索此模式并在将其保存到数据库之前对其进行修复。你同意吗? @Lluthus 你为什么要问我们?为什么要修复 XML 的唯一方法是?您为什么不直接联系发送不良数据的人并让他们修复它? 我绝对不同意。如果有人寄给你一袋面粉,里面装满了象鼻虫,你不会通过筛选去除象鼻虫,而是把它寄回去,向供应商投诉,和/或寻找其他供应商。你被发送了垃圾邮件;如果他们把这样的细节弄错了,那么你就不能相信他们是数据的提供者,你也不应该把这些东西放在你宝贵的数据库中。

以上是关于将包含 &#38 的 XML 值节点保存到数据库中的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在 XML 文档中搜索值列表

在网页上编辑 XML 文件并使用 PHP 保存回 XML 文件

如何将输入/选择值从网站保存到 XML/JSON 文件并使用 JavaScript 自动加载再次填充它们

当节点包含值时,使用 JAXB 将 XML 转换为对象

使用 simplexml 将 xml 节点值更新 1。是不是可以?

保存前将节点添加到XML