2014-11-02 57 views
-4

将XML字符串保存为文件时,出现错误的输出XML和特殊字符。 “<”和“>”标签分别替换为&lt;&gt;为什么WriteAllText方法使用特殊字符保存XML?

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”; //存储由webservice返回的XML string urlText =“”;
// call webservice WebRequest request = HttpWebRequest.Create(url); //用得到的Web服务 响应(WebResponse的响应= 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; 

          } 
         } 

        } 
+0

XmlDocument.Save()也许?在您的问题原始 - 和替换是相同的... – 2014-11-02 19:02:50

+2

'File.WriteAllText()'不会修改您正在写入文件的文本。所以如果你在用'urlText'表示的XML中获得实体替换,那么在调用'WriteAllText()'之前就发生了这种情况。不幸的是,你还没有提供一个好的代码示例,所以没有办法回答这个问题。请参阅http://stackoverflow.com/help/mcve – 2014-11-02 19:14:36

+0

我从webservice获取XML以上代码 – 2014-11-03 13:06:48

回答

0

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