首页 文章

为什么WriteAllText方法使用特殊字符保存XML?

提问于
浏览
-4

将XML字符串保存为文件时,我得到一个带有特殊字符的错误输出XML . "<"和">"标记分别替换为 &lt;&gt; .

XML字符串:

<string xmlns="http://smartpark.com/">
  <DocumentElement> 
    <SpaceInfo> 
      <R_Numb>490</R_Numb> 
      <FirstName>Michael</FirstName> 
      <LastName>Jones</LastName> 
      <Unit>311</Unit> 
      <Type>RG</Type> 
      <Location>FLOOR 1</Location> 
      <Feature>C</Feature> 
      <Space>100</Space> 
      <Status>Assigned</Status> 
      <DateAssigned>2014-09-24T00:00:00-05:00</DateAssigned> 
    </SpaceInfo> 
  </DocumentElement>
</string>

保存方法:

System.IO.File.WriteAllText(Server.MapPath("testing.xml"), urlText,Encoding.UTF8);

对不起,这里的人是整个代码片段:

string url =“http://smartparkllc.com/Service1.asmx/SpaceInfo?space=100”; //存储webservice字符串返回的XML urlText =“”; //调用webservice WebRequest request = HttpWebRequest.Create(url); //使用(WebResponse response = request.GetResponse())获取来自Web服务的响应{using(StreamReader reader1 = new StreamReader(response.GetResponseStream())){

urlText = reader1.ReadToEnd();

                testweb.Text = urlText;//this is for testing. Can be remove   
                //create temp xml files from string containing XML returned by webservice
                System.IO.File.WriteAllText(Server.MapPath("testing2.xml"), urlText,Encoding.UTF8);                   

                using (XmlReader reader = XmlReader.Create(Server.MapPath("testing2.xml")))
                {

                    SpaceInfo newspaceinfo = new SpaceInfo();                      
                    while (reader.Read())
                    {
                        //Only detect start elements.
                        if (reader.IsStartElement())
                        {
                            // Get element name and switch on it.
                            switch (reader.Name)
                            {
                                case "R_Numb":

                                    if (reader.Read())
                                    {
                                        //get value
                                        newspaceinfo.R_Numb = Convert.ToInt32(reader.Value.Trim());
                                    }                                        
                                   break;
                                case "FirstName":
                                   if (reader.Read())
                                   {
                                       newspaceinfo.FirstName = reader.Value.Trim();
                                   }
                                    break;
                                case "LastName":
                                    if (reader.Read())
                                    {
                                        newspaceinfo.LastName = reader.Value.Trim();
                                    }
                                    break;
                                case "Unit":
                                    if (reader.Read())
                                    {
                                        newspaceinfo.Unit = reader.Value.Trim();

                                    }
                                    break;
                                case "Type":
                                    if (reader.Read())
                                    {
                                        newspaceinfo.Type = reader.Value.Trim();

                                    }
                                    break;
                                case "Location":
                                    if (reader.Read())
                                    {
                                        newspaceinfo.Location = reader.Value.Trim();

                                    }
                                    break;
                                case "Feature":
                                    if (reader.Read())
                                    {
                                        newspaceinfo.Feature = reader.Value.Trim();

                                    }
                                    break;
                                case "Status":
                                    if (reader.Read())
                                    {
                                        newspaceinfo.Status = reader.Value.Trim();

                                    }
                                    break;
                                case "DateAssigned":
                                    if (reader.Read())
                                    {
                                        newspaceinfo.DateAssigned = reader.Value.Trim();

                                    }
                                    break;

                            }
                        }

                    }

1 回答

  • 0

    如果您的XML中的左右括号除了标记之外,它们将被编码为 &lt;&gt; . 此行为是设计使然并称为escaping . 当您回读XML时,这些值将被取消转义,您将在.NET代码中再次看到 <> .

相关问题