2017-06-29 162 views
0

我有這個Xml從URL輸出XML 使用HTTP GET方法如何添加XML聲明?

如何添加此XML聲明?

?XML版本= 「1.0」 編碼= 「ISO-8859-1」?>

這是的ServiceContract

[ServiceContract] 
public interface IService1 
{ 
    [OperationContract] 
      [WebInvoke(Method = "GET", 
      ResponseFormat = WebMessageFormat.Xml, 
      //BodyStyle = WebMessageBodyStyle.Wrapped, 
      UriTemplate = "{id}")] 

    XElement GetRecipesByID(string id); 

這是實現, 我轉換數據表到XML並從URL獲得

public XElement GetRecipesByID(string id) 
    { 
     StringWriter str = new StringWriter(); 
     DataSet dataSet = new DataSet(); 
     dataSet.Tables.Add(Table); 
     XmlTextWriter xtext = new XmlTextWriter(str); 
     xtext.Formatting = Formatting.Indented; 
     xtext.WriteStartDocument(); 
      xtext.WriteStartElement("rss"); 
      xtext.WriteAttributeString("version", "2.0"); 
      xtext.WriteStartElement("channel"); 
      xtext.WriteElementString("title", "GetCard"); 
      xtext.WriteElementString("link", "10.0.0.253"); 
      xtext.WriteElementString("lastBuildDate", " "); 
      xtext.WriteElementString("generator", "Alikas Feed"); 
      xtext.WriteElementString("error", error); 
      xtext.WriteElementString("cardid", "RX0016502"); 
      xtext.WriteElementString("name", " "); 
      xtext.WriteElementString("passport_id", "60001082881"); 
      xtext.WriteElementString("tel", " "); 
      xtext.WriteEndElement(); 
      xtext.WriteEndDocument(); 

      result = str.ToString(); 

     xtext.Close(); 

     XmlDocument doc = new XmlDocument(); 
     doc.Save(str); 


     return XElement.Parse(result); 

    } 

當我將這個xml保存在文件中有XML聲明,但是當我嘗試從URL XML聲明得到這個XML不顯示。 我需要從URL中顯示此聲明。 謝謝

回答

0

WriteStartDocument應該已經添加了XML聲明。它使用您的TextWriter指定的Encoding

您使用的是一個StringWriter,它總是會報告UTF-16,因爲.NET字符串是UTF-16。要獲得ISO-8859-1,您需要用明確的編碼構建一個StreamWriter或其他一些TextWriter

您是否考慮過直接創建XDocument?在這種情況下無需使用XmlWriter

+0

是的,我的XDocument,但同樣的結果嘗試的工作。 當我在文件中寫入這個XML我有XML聲明,但在Chrome不顯示。 –

+0

如果它在文件中,那麼它聽起來像不是代碼問題。 Chrome只是沒有顯示出來。 –

0

嘗試以下操作:

  string header = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><rss version=\"2.0\"/>"; 
      XDocument doc = XDocument.Parse(header); 

      XElement rss = doc.Root; 

      Boolean error = false; 
      rss.Add(new XElement("channel", new object[] { 
       new XElement("title", "GetCard"), 
       new XElement("link", "10.0.0.253"), 
       new XElement("lastBuildDate", " "), 
       new XElement("generator", "Alikas Feed"), 
       new XElement("error", error), 
       new XElement("cardid", "RX0016502"), 
       new XElement("name"), 
       new XElement("passport_id", "60001082881"), 
       new XElement("tel") 
      })); 

      doc.Save(@"c:\temp\test.xml"); 
0

有這個一個特殊的方法:從MSDN上的編碼參數

var xmlDoc = new XmlDocument(); 
xmlDoc.CreateXmlDeclaration("1.0", "ISO-8859-1", null); 
xmlDoc.Save(str); 

注:這是當你保存的XmlDocument到正在使用的編碼一個文件或一個流;因此,它必須設置爲Encoding類支持的字符串,否則保存失敗。

0

這似乎爲我

XDocument xel = XDocument.Parse( "<root><el>123</el></root>"); 
xel.Declaration = new XDeclaration("1.0","UTF-8","true"); 
xel.Save(@"c:\temp.xml");