2011-01-27 19 views
1

如何獲取下面的代碼以返回所需的輸出。這只是一個簡單的csharp,沒有ASP.NET。解碼從&從XML與ToString()

//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()); 
    } 

這是我如何解決特定問題。

 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()); 
+3

我不認爲所需的輸出是有效的XML,所以我懷疑XmlTextWriter會爲你做。 – 2011-01-27 23:15:22

+0

HtmlTextWriter雖然可能... – 2011-01-27 23:54:41

回答

0

這是我如何解決特定問題。

 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()); 
1

期望的輸出是無效的XML。當前輸出與CDATA部分相同,因爲Before &amp; After<![CDATA[Before & After]]>只是轉義&符號的兩種不同方式,因此您可以擁有有效的XML。無論哪種情況,如果您使用任何XML解析器來讀取<amp>標記的內容,它將返回Before & After

2

如果你想要無效的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); 

但是,這是不是有效 XML,所以不要做。如果你想使用XML,你需要使用有效的XML。您的原始代碼示例是正確的。

如果你想要更人性化的東西,那麼不要使用XML,使用YAML。

http://www.yaml.org/

amp: Before & After