从包含 HTML 的字符串中加载 xml

Load xml from string that contains HTML

我正在做以下事情 -

        // Create message
        StringBuilder sbXML = new StringBuilder();
        sbXML .Append("<root>");
        sbXML .AppendFormat("<messageBody>{0}</messageBody>", JsonString);          
        sbXML .Append("</root>");

其中 JsonString 是一个 json 字符串,但是 json 中的一些条目是 html 的字符串(我认为这就是它被破坏的原因).

当我做 -

        XmlDocument xmlDOC = new XmlDocument();
        xmlDOC.LoadXml(sbXML.ToString());

我收到错误 -

'\' is an unexpected token. The expected token is '"' or '''.

我的 Json 也包含 url,例如 -

{
    "exampleJson": {
        "url":  "http://example.com/",
        "html": "<a href=\"http://example.com\" rel=\"test\">example text</a>"
    }
}

我相信是这些值导致了异常,有没有办法解决这个问题,以便 xmlDOC.LoadXml 可以加载我的 Json,我考虑过做类似 -[=20= 的事情]

xmlDOC.LoadXml(sbXML.ToString().Replace("character to replace", "acceptable character"));

但这显然不理想。我也试过只使用

.Load

然而这导致了路径异常中的非法字符。

您需要使用 CDATA 标签。

示例:

<messageBody><![CDATA[ any json data  ]]> </messageBody>

我想你想做这样的事情:

        StringBuilder sbXML = new StringBuilder();
        sbXML.Append("<root>");
        sbXML.Append("<messageBody />");
        sbXML.Append("</root>");

        XmlDocument xmlDOC = new XmlDocument();
        xmlDOC.LoadXml(sbXML.ToString());
        xmlDOC.DocumentElement.SelectSingleNode("messageBody").InnerText = JsonString;

正如@Alexei Levenkov 指出的那样,通过字符串连接创建 Xml 是一个非常糟糕的主意,以后会导致更多问题。

使用 System.Xml.XmlDocument 方法是一种更安全的方法,它将对所有需要的位进行编码,以使 JsonString Xml 的值安全。