Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 解码及;来自&;amp;从XML到ToString()_C#_Xml - Fatal编程技术网

C# 解码及;来自&;amp;从XML到ToString()

C# 解码及;来自&;amp;从XML到ToString(),c#,xml,C#,Xml,如何获取下面的代码以返回所需的输出。这只是一个简单的csharp,没有ASP.NET //Desired output: <amp>Before & After</amp> //instead of //Current output: <amp>Before &amp; After</amp> static void Main(string[] args) { string amp = "Bef

如何获取下面的代码以返回所需的输出。这只是一个简单的csharp,没有ASP.NET

//Desired output: <amp>Before & After</amp>

//instead of

//Current output: <amp>Before &amp; After</amp>

    static void Main(string[] args)
    {
        string amp = "Before & After";
        XmlDocument doc = new XmlDocument();

        StringBuilder sb = new StringBuilder();
        StringWriter stringWriter = new StringWriter(sb);
        XmlTextWriter xmlWriter = new XmlTextWriter(stringWriter);

        xmlWriter.WriteStartElement("amp");
        xmlWriter.WriteString(amp);
        xmlWriter.WriteEndElement();

        global::System.Windows.Forms.MessageBox.Show(sb.ToString());
    }

您可以将文本放入CDATA区域-请参阅。

所需的输出不是有效的XML。当前输出与&;之前的
中的CDATA部分相同;After
只是两种不同的方式来转义符号and,这样您就可以拥有有效的XML。在任何一种情况下,如果您使用任何XML解析器读取
标记的内容,如果您希望自己创建无效的XML,它将返回
之前和之后的

        string amp = "Before & After";

        // don't really do this, it's very wrong
        StringBuilder sb = new StringBuilder();
        sb.Append("<amp>");
        sb.Append(amp);
        sb.Append("</amp>");

        Console.WriteLine(sb);

下面是我如何解决这个特殊问题的

        string amp = "Before & After";
        XmlDocument doc = new XmlDocument();

        StringBuilder sb = new StringBuilder();
        StringWriter stringWriter = new StringWriter(sb);
        XmlTextWriter xmlWriter = new XmlTextWriter(stringWriter);

        xmlWriter.WriteStartElement("amp");
        xmlWriter.WriteString(amp);
        xmlWriter.WriteEndElement();

        StringReader valueStringReader = new StringReader(sb.ToString());
        XmlTextReader valueXmlReader = new XmlTextReader(valueStringReader);

        valueXmlReader.MoveToContent();

        global::System.Windows.Forms.MessageBox.Show(valueXmlReader.ReadString());
        string amp = "Before & After";
        XmlDocument doc = new XmlDocument();

        StringBuilder sb = new StringBuilder();
        StringWriter stringWriter = new StringWriter(sb);
        XmlTextWriter xmlWriter = new XmlTextWriter(stringWriter);

        xmlWriter.WriteStartElement("amp");
        xmlWriter.WriteString(amp);
        xmlWriter.WriteEndElement();

        StringReader valueStringReader = new StringReader(sb.ToString());
        XmlTextReader valueXmlReader = new XmlTextReader(valueStringReader);

        valueXmlReader.MoveToContent();

        global::System.Windows.Forms.MessageBox.Show(valueXmlReader.ReadString());

我认为所需的输出不是有效的XML,因此我怀疑XmlTextWriter是否会为您这样做。HtmlTextWriter可能……没错,所需的输出不是XML。我希望将其转换回字符串缓冲区中的可读字符。请勿使用
new XmlTextWriter()
。自.NET 2.0以来,它一直被弃用。改用
XmlWriter.Create()
。以上只是一个更大问题的再现。我不想创建无效的XML,我只想将XML写入可读的输出中。
        string amp = "Before & After";
        XmlDocument doc = new XmlDocument();

        StringBuilder sb = new StringBuilder();
        StringWriter stringWriter = new StringWriter(sb);
        XmlTextWriter xmlWriter = new XmlTextWriter(stringWriter);

        xmlWriter.WriteStartElement("amp");
        xmlWriter.WriteString(amp);
        xmlWriter.WriteEndElement();

        StringReader valueStringReader = new StringReader(sb.ToString());
        XmlTextReader valueXmlReader = new XmlTextReader(valueStringReader);

        valueXmlReader.MoveToContent();

        global::System.Windows.Forms.MessageBox.Show(valueXmlReader.ReadString());