从包含 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 的值安全。
我正在做以下事情 -
// 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 的值安全。