为什么WriteAllText方法使用特殊字符保存XML
本文关键字:特殊字符 保存 XML WriteAllText 方法 为什么 | 更新日期: 2023-09-27 18:28:58
将XML字符串保存为文件时,我得到了一个带有特殊字符的错误输出XML。"<"answers">"标记分别替换为<
和>
。
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;
}
}
}
如果XML中除了标记之外的任何位置都有左括号和右括号,则它们将被编码为<
和>
。这种行为是经过设计的,称为转义。当您读回XML时,这些值将被取消标注,并且您将在.NET代码中再次看到<
和>
。