为什么HTML解码不适用于* $

时间:2018-09-12 07:08:18

标签: c# xml decode

我有一个控制台应用程序可以加载XmlDocument,但是如果字符串具有类似* $

的值,它将无法加载

任何想法如何加载xml?感谢所有回复

using System;
using System.Net;   
using System.Xml;

public class Program
{
    public static void Main()
    {
        //string xmlStringWorking = "<xml>&copy; &uml; &Agrave; &yen; &sect;</xml>";

        string xmlStringWorking = "<xml>&ast; &dollar; &copy; &uml; &Agrave; &yen; &sect;</xml>";

        xmlStringWorking= WebUtility.HtmlDecode(xmlStringWorking);

        XmlDocument doc = new XmlDocument();
                        doc.LoadXml(xmlStringWorking);

        Console.WriteLine(xmlStringWorking);
    }
}

期望特殊字符为here

dotnetfiddle

3 个答案:

答案 0 :(得分:4)

HtmlDecode仅用于消除HtmlEncode的影响。由于*$在HTML中没有特殊含义,因此不需要对其进行编码。因此HtmlEncode不会将它们编码为&ast;&dollar;;因此HtmlDecode将不会对其进行解码。

答案 1 :(得分:2)

您必须使用以下值声明这些实体:

string xmlStringWorking = "<!DOCTYPE xml [<!ENTITY ast \"*\"> <!ENTITY dollar \"$\">]> <xml>&ast; &dollar; © ¨ À ¥ §</xml>";

https://docs.microsoft.com/en-us/dotnet/standard/data/xml/reading-entity-declarations-and-entity-references-into-the-dom

答案 2 :(得分:1)

您可以替换:    *通过&#42;    $ by &#36;

string xmlStringWorking = "<xml>&#42; &#36; &copy; &uml; &Agrave; &yen; &sect;</xml>";