.net 编码字符串的特定部分并将其加载到xml

5ssjco0h  于 2022-12-30  发布在  .NET
关注(0)|答案(1)|浏览(141)

当我将字符串xml加载到XmlDocument对象中时,它会引发
“〈”(十六进制值0x3C)是无效的属性字符。

string xml= Request.Form["webformfield"] + string.Empty;

// it will read the input from webform in encoded format
e.g:
<Models><Model ModelID="F2434" ModelName="FTest 1 & Income MP" />

try around: 
//decoded the whole string
StringWriter sw = new StringWriter();
Server.HtmlDecode(models, sw); // this is an internal method of the framework.
models = sw.ToString();

after decoding the string, the string will be stored below
//string xml = "<Models><Model ModelId=\"124\" ModelNameWithSpecialCHars=\"Test1 <> & \"' characters \"/><Model ModelId=\"124\" ModelNameWithSpecialCHars=\"Test2 <> & \"' characters \"/></Models>";

XmlDocument xmlDocument = new XmlDocument();

xmlDocument.LoadXml(xml);
Console.WriteLine(xmlDocument.OuterXml);

我已经在运行时手动更改了xml字符串,它工作了。从字符串中更改了ModelNameWithSpecialCHars属性的值。添加了字符串图像,因为当我编写编码的特殊字符时,它以解码格式显示。找到下面的代码。
变更字符串:

XmlDocument xmlDocument = new XmlDocument();
        xmlDocument.LoadXml(xml);
        Console.WriteLine(xmlDocument.OuterXml);
        Console.ReadLine();

有没有什么方法可以只对字符串的特定部分进行编码

string xml = "<Models><Model ModelId=\"124\" ModelNameWithSpecialCHars=\"Tes <> & \"' characters \"/></Models>";

在上面的字符串中,我只需要编码ModelNameWithSpecialCHars属性的值。(“Tes〈〉&”')

iyfamqjs

iyfamqjs1#

当然可以--只需将需要编码的部分放在一个单独的变量中,然后使用WebUtility.HtmlEncode方法(在System.Net中找到):

string bad_xml = "Tes <> & \"' characters ";
bad_xml = WebUtility.HtmlEncode(bad_xml);
string xml = "<Models><Model ModelId=\"124\" ModelNameWithSpecialCHars=\"" + bad_xml + "\"/Model></Models>"

尽管您可能会发现使用XmlDocument类添加元素和属性更简洁,因为您最终还是希望有一个XmlDocument,并且它会将文本编码为有效的XML,这对转义的要求略有不同(尽管对于测试字符串来说它们是等效的)。

相关问题