JSON 到 XML:如何避免特殊字符编码 # 到 _x0023_?
Posted
技术标签:
【中文标题】JSON 到 XML:如何避免特殊字符编码 # 到 _x0023_?【英文标题】:JSON to XML : How to avoid the special character encoding # to _x0023_? 【发布时间】:2021-09-06 00:52:19 【问题描述】: var data = "\"#access_token\":\"Vishnu\"";
XmlDocument doc = (XmlDocument)Newtonsoft.Json.JsonConvert.DeserializeXmlNode(data.ToString(), "root", false, false);
var output = doc.InnerXml.ToString();
预期输出:毗湿奴#access_token>
但得到了:<_x0023_access_token>毗湿奴。
公共静态 XmlDocument DeserializeXmlNode( 字符串值, 字符串反序列化根元素名称, 布尔 writeArrayAttribute, bool encodeSpecialCharacters --> true 和 false 给出相同的结果。 )
请提供一种方法来获取#,因为它是 XML。
【问题讨论】:
#
不是有效的NameStartChar。因此,您不应该期望任何设计良好的 XML 工具都能生成。公平地说,声称接受 XML 的东西也不应该希望您生成这样的项目。
您正在使用 html,因此您必须遵循 HTML 特殊字符而不是 XML。为什么标记名有 # 字符?
#access_token 是作为 Oauth2.0 流程的一部分接收的密钥,我们必须保留它
也许是这样,但这并不意味着您可以违反 XML 规则,即元素名称不能以 #
开头。 Oauth2.0
肯定不是要求您尝试将您的身份验证令牌存储在 XML 中,更不用说将 XML 元素的名称指定为无效的了。
知道了。谢谢你。根据 XML 规范,# 不是 XML 名称中的有效字符,因此它不起作用。
【参考方案1】:
声称可以将 JSON 转换为 XML 的东西有望用于生成格式良好的 XML;您似乎希望它生成包含元素名称中无效字符的 XML,这对任何人都没有用。
不同的 JSON 到 XML 转换器有不同的方法来处理这个问题,但至少如果它是格式良好的 XML,那么您可以编写一个 XSLT 转换来将其转换为您希望看到的 XML。
(如果您想更好地控制转换的完成方式,请在 XSLT 3.0 样式表中完成所有工作。)
【讨论】:
以上是关于JSON 到 XML:如何避免特殊字符编码 # 到 _x0023_?的主要内容,如果未能解决你的问题,请参考以下文章
在没有 REPLACE 功能的情况下使用“FOR XML PATH”时如何避免字符编码
Spring mvc jackson json mapper-如何将unicode编码应用于json响应中的特殊字符