2012-06-13 90 views
3

我收到了一個非常奇怪的行爲,無法確定問題。在下面的代碼片段有望走出了XmlReader的ReadString方法刪除/忽略CDATA標記

<![CDATA[<air:FareInfo Key="10T"></air:FareInfo>/>]]> 

,但我發現

<air:FareInfo Key="10T"></air:FareInfo>/> 

爲什麼CDATA標籤在輸出中缺少的?我只是簡單地使用XmlReader.ReadString()而忽略了CDATA標籤。

string xml = "<FareInfo>" + 
     "<![CDATA[<air:FareInfo Key=\"10T\">" + 
      "</air:FareInfo>/>]]>" + 
     "</FareInfo>"; 

     Encoding encoding = new UTF8Encoding(); 
     byte[] buffer = encoding.GetBytes(xml); 
     MemoryStream stream = new MemoryStream(buffer); 

     XmlReaderSettings settings = new XmlReaderSettings(); 
     XmlReader reader = XmlReader.Create(stream, settings); 

     reader.Read(); 

     string output = reader.ReadString(); 

     Console.Write(output); 

在這方面的任何幫助將是非常可觀的。

回答

2

做到這一點的方法: -

switch (reader.NodeType) { 
     case XmlNodeType.Text: 
      Console.Write(reader.Value); 
      break; 
     case XmlNodeType.CDATA: 
      Console.Write("<![CDATA[{0}]]>", reader.Value); 
      break; 
} 
+0

感謝溼婆。我正在思考同樣的問題。請你讓我知道爲什麼Readstring()忽略CDATA? – Rizwan

+0

在XML中「![CDATA」是一個類似於「<" or ">」的特殊標籤。 XmlReader以與忽略「<" or ">」相同的方式忽略它。 – jing