繁体   English   中英

如何添加XML声明?

[英]How Can I add XML declaration?

我使用HTTP GET方法从URL XML获得此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);

这是实现,我将DataTable转换为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显示此声明。 谢谢

WriteStartDocument应该已经添加了XML声明。 它使用TextWriter指定的Encoding

您正在使用StringWriter ,它将始终报告UTF-16,因为.NET字符串位于UTF-16中。 要获得ISO-8859-1,您需要使用显式编码构造一个StreamWriter或其他TextWriter

您是否考虑过直接创建XDocument 在这种情况下,无需使用XmlWriter

尝试以下操作:

            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");

为此有一种特殊的方法:

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

注意:来自msdn的encoding参数:这是将XmlDocument保存到文件或流中时使用的编码。 因此,必须将其设置为Encoding类支持的字符串,否则保存将失败。

这似乎对我有用

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM