无法将字符串转换为XML

时间:2015-05-11 09:15:47

标签: c# asp.net xml

我将XML作为字符串传递给方法,并再次将其转换为XML来完成我的工作。

它正常工作正常,但是当有&=这样的特殊字符时,它会发出错误。

我的XML字符串:

<SuggestedReadings>
   <Suggestion Text="Customer Centricity" Link="http://wdp.wharton.upenn.edu/book/customer-centricity/?utm_source=Coursera&utm_medium=Web&utm_campaign=custcent" SuggBy="Pete Fader�s" />
   <Suggestion Text="Global Brand Power" Link="http://wdp.wharton.upenn.edu/books/global-brand-power/?utm_source=Coursera&utm_medium=Web&utm_campaign=glbrpower" SuggBy="Barbara Kahn�s" />
</SuggestedReadings>

我的代码是:

public class saveData(string strXml)
{
      XmlDocument xmlDoc = new XmlDocument();
      xmlDoc.LoadXml(CD.SRList);// here its giving error
}

错误:

  

'='是一个意外的令牌。预期的标记是';'。第1行,第150位。

完整错误是:

  

用户代码HResult = -2146232000未处理System.Xml.XmlException   Message ='='是一个意外的令牌。预期的标记是';'。第1行,   位置150. Source = System.Xml LineNumber = 1 LinePosition = 150   SourceUri =“”StackTrace:at   System.Xml.XmlTextReaderImpl.Throw(Exception e)at   System.Xml.XmlTextReaderImpl.Throw(String res,String [] args)at   System.Xml.XmlTextReaderImpl.ThrowUnexpectedToken(字符串   expectedToken1,String expectedToken2)at   System.Xml.XmlTextReaderImpl.ThrowUnexpectedToken(Int32 pos,String   expectedToken1,String expectedToken2)at   System.Xml.XmlTextReaderImpl.HandleEntityReference(布尔   isInAttributeValue,EntityExpandType expandType,Int32&amp; charRefEndPos)   在System.Xml.XmlTextReaderImpl.ParseAttributeValueSlow(Int32 curPos,   Char quoteChar,NodeData attr)at   System.Xml.XmlTextReaderImpl.ParseAttributes()at   System.Xml.XmlTextReaderImpl.ParseElement()at   System.Xml.XmlTextReaderImpl.ParseElementContent()at   System.Xml.XmlTextReaderImpl.Read()at   System.Xml.XmlLoader.LoadNode(Boolean skipOverWhitespace)at   System.Xml.XmlLoader.LoadDocSequence(XmlDocument parentDoc)at at   System.Xml.XmlLoader.Load(XmlDocument doc,XmlReader reader,Boolean   保存在System.Xml.XmlDocument.Load(XmlReader   读者)在System.Xml.XmlDocument.LoadXml(String xml)at   ICA.LMS.Service.Controllers.AdminCourseApiController.SaveCourse(CourseDetails   CD)在d:\ Live中   项目\ ICA_LMS \ ICA_LMS_WebAPI \ \控制器AdminCourseApiController.cs:行   122 at lambda_method(Closure,Object,Object [])at   System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor&LT;&GT; c__DisplayClass10.b__9(对象   instance,Object [] methodParameters)at   System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(对象   instance,Object [] arguments)at   System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext   controllerContext,IDictionary`2参数,CancellationToken   cancellationToken)InnerException:

4 个答案:

答案 0 :(得分:3)

您的文档缺少XML标头,这是必需的。此外,您没有正确转义&字符。

尝试在XML文档之上添加它:

<?xml version="1.0" encoding="UTF-8"?>

并将&替换为&amp;。 (见list of characters to escape

答案 1 :(得分:2)

&是XML中的特殊字符。尝试使用&amp;代替&

<SuggestedReadings>
   <Suggestion Text="Customer Centricity" Link="http://wdp.wharton.upenn.edu/book/customer-centricity/?utm_source=Coursera&amp;utm_medium=Web&amp;utm_campaign=custcent" SuggBy="Pete Fader�s" />
   <Suggestion Text="Global Brand Power" Link="http://wdp.wharton.upenn.edu/books/global-brand-power/?utm_source=Coursera&amp;utm_medium=Web&amp;utm_campaign=glbrpower" SuggBy="Barbara Kahn�s" />
</SuggestedReadings>

答案 2 :(得分:1)

它实际上是错误转义的&符号。它只是期望它是形式和形式的逃脱角色;所以当它到达=它会抛出错误。

[TestMethod]
public void BadXml()
{
    string xml = "<SuggestedReadings><Suggestion Text=\"Customer Centricity\" Link=\"http://wdp.wharton.upenn.edu/book/customer-centricity/?utm_source=Coursera&utm_medium=Web&utm_campaign=custcent\" SuggBy=\"Pete Fader�s\" /><Suggestion Text=\"Global Brand Power\" Link=\"http://wdp.wharton.upenn.edu/books/global-brand-power/?utm_source=Coursera&utm_medium=Web&utm_campaign=glbrpower\" SuggBy=\"Barbara Kahn�s\" /></SuggestedReadings>";

    XmlDocument xdoc = new XmlDocument();
    xml = xml.Replace("&", "&amp;");
    xdoc.LoadXml(xml);

}

答案 3 :(得分:1)

  

XML预定义了以下五个特殊实体引用   否则将被解释为标记的一部分的字符   语言

<   ->  &lt;
>   ->  &gt;
"   ->  &quot;
'   ->  &apos;
&   ->  &amp;
  

您可以使用实体和字符引用来转义左角   括号,&符号和其他分隔符。您也可以使用数字   字符引用。扩展了数字字符引用   当他们被认出时立即。另外,因为数字   字符引用被视为字符数据,您可以使用   数字字符引用

希望这些链接能为您提供帮助。

如何使用Visual C#.NET查找和替换XML文件中的特殊字符 https://support.microsoft.com/en-us/kb/316063

如何在C#中转义XML字符串的不同方法 http://weblogs.sqlteam.com/mladenp/archive/2008/10/21/Different-ways-how-to-escape-an-XML-string-in-C.aspx