使用C# XDocument.Parse解析XML字符串遇XmlException错误求助
问题解决:XML解析报错“An error occurred while parsing EntityName”
错误原因
你的XML字符串里存在未按规范转义的特殊字符&。XML要求&必须转义为&,否则解析器会把&当成实体引用的起始标识,但后续的&并不是合法的实体名称,因此触发解析错误。
看你提供的XML中ng-if属性值:
ng-if="this.generatedForm.result.$invalid && this.generatedForm.result.$dirty"
这里的&&就是未转义的&,这是报错的核心原因。
解决方案
1. 修正XML字符串
把所有未转义的&替换为&,修正后的完整XML如下:
<form name="generatedForm" role="form"> <div class="form-group"> <label for="result"> Calculation Result </label> <input class="form-control" name="result" cam-variable-type="Long" cam-variable-name="result" type="text" /> <div ng-if="this.generatedForm.result.$invalid && this.generatedForm.result.$dirty" class="has-error"> <div ng-show="this.generatedForm.result.$error.required" class="help-block"> Required field </div> <div ng-show="this.generatedForm.result.$error.camVariableType" class="help-block"> Only a long value is allowed </div> </div> </div> <div class="form-group"> <label for="correcto"> es correcto? </label> <input class="form-control" name="correcto" cam-business-key type="checkbox" /> <div ng-if="this.generatedForm.correcto.$invalid && this.generatedForm.correcto.$dirty" class="has-error"> <div ng-show="this.generatedForm.correcto.$error.required" class="help-block"> Required field </div> <div ng-show="this.generatedForm.correcto.$error.camVariableType" class="help-block"> Only a boolean value is allowed </div> </div> </div> </form>
2. 修正C#代码
你当前代码里的XDocument.Parse("XmlString")只是传入了占位符字符串,实际要传入修正后的XML内容,示例如下:
// 用逐字字符串保留XML格式,双引号用""转义 string correctedXml = @"<form name=""generatedForm"" role=""form""> <div class=""form-group""> <label for=""result""> Calculation Result </label> <input class=""form-control"" name=""result"" cam-variable-type=""Long"" cam-variable-name=""result"" type=""text"" /> <div ng-if=""this.generatedForm.result.$invalid && this.generatedForm.result.$dirty"" class=""has-error""> <div ng-show=""this.generatedForm.result.$error.required"" class=""help-block""> Required field </div> <div ng-show=""this.generatedForm.result.$error.camVariableType"" class=""help-block""> Only a long value is allowed </div> </div> </div> <div class=""form-group""> <label for=""correcto""> es correcto? </label> <input class=""form-control"" name=""correcto"" cam-business-key type=""checkbox"" /> <div ng-if=""this.generatedForm.correcto.$invalid && this.generatedForm.correcto.$dirty"" class=""has-error""> <div ng-show=""this.generatedForm.correcto.$error.required"" class=""help-block""> Required field </div> <div ng-show=""this.generatedForm.correcto.$error.camVariableType"" class=""help-block""> Only a boolean value is allowed </div> </div> </div> </form>"; var x = XDocument.Parse(correctedXml);
内容的提问来源于stack exchange,提问作者Ivalberto
相关产品推荐
相关产品推荐

