从包含HTML的字符串加载xml

时间:2018-04-19 15:12:20

标签: c# load xmldocument

我正在做以下事情 -

        // 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也包含网址,例如 -

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

我相信正是导致异常的是这些值,有没有办法让xmlDOC.LoadXml加载我的Json,我考虑做类似的事情 -

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

然而,这显然不太理想。我也尝试过使用

.Load

然而,这导致路径异常中出现非法字符。

2 个答案:

答案 0 :(得分:0)

我想你想做的事情是:

        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的值安全。

答案 1 :(得分:-1)

您需要使用CDATA标记。

示例:

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