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响应中的特殊字符

XSL 编码特殊字符 XML 格式正确

xml json

在鼓励使用特殊字符的密码等字段的 REST API 中,避免 WAF 误报的最佳编码实践是啥

Play 框架中的 Json 响应字符编码