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

本文关键字:特殊字符 保存 XML WriteAllText 方法 为什么 | 更新日期: 2023-09-27 18:28:58

将XML字符串保存为文件时,我得到了一个带有特殊字符的错误输出XML。"<"answers">"标记分别替换为&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); 

抱歉,伙计们,这里是整个代码片段:

字符串url="http://smartparkllc.com/Service1.asmx/SpaceInfo?space=100";//存储Web服务返回的XMLstring urlText="
//呼叫Web服务WebRequest请求=HttpWebRequest.Create(url);//从web服务获取响应使用(WebResponse response=request.GetResponse()){使用(StreamReader reader1=新的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;
                            }
                        }
                    }

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

如果XML中除了标记之外的任何位置都有左括号和右括号,则它们将被编码为&lt;&gt;。这种行为是经过设计的,称为转义。当您读回XML时,这些值将被取消标注,并且您将在.NET代码中再次看到<>