我将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:
答案 0 :(得分:3)
您的文档缺少XML标头,这是必需的。此外,您没有正确转义&
字符。
尝试在XML文档之上添加它:
<?xml version="1.0" encoding="UTF-8"?>
并将&
替换为&
。 (见list of characters to escape)
答案 1 :(得分:2)
&
是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>
答案 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("&", "&");
xdoc.LoadXml(xml);
}
答案 3 :(得分:1)
XML预定义了以下五个特殊实体引用 否则将被解释为标记的一部分的字符 语言
< -> <
> -> >
" -> "
' -> '
& -> &
您可以使用实体和字符引用来转义左角 括号,&符号和其他分隔符。您也可以使用数字 字符引用。扩展了数字字符引用 当他们被认出时立即。另外,因为数字 字符引用被视为字符数据,您可以使用 数字字符引用
希望这些链接能为您提供帮助。
如何使用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