C# 在格式错误的xml中转义属性中的内部引号

C# 在格式错误的xml中转义属性中的内部引号,c#,.net,xml,C#,.net,Xml,我有以下第三方xml,其中包含格式不正确的xml片段,我正在尝试使用XmlTextReader来读取它 <ReplacementDefinitions> <Def key="EnclosingFunction.name" value="_jspService(System.Configuration.ConfigurationManager.ConnectionStrings["Upload_Service"].ToString())"/>

我有以下第三方xml,其中包含格式不正确的xml片段,我正在尝试使用XmlTextReader来读取它

   <ReplacementDefinitions>
        <Def key="EnclosingFunction.name" value="_jspService(System.Configuration.ConfigurationManager.ConnectionStrings["Upload_Service"].ToString())"/>
        <Def key="PrimaryCall.name" value="print()"/>
        <Def key="PrimaryLocation.file" value="Error.jsp"/>
        <Def key="PrimaryLocation.line" value="20"/>
        <LocationDef path="webapp/jsp/common/Error.jsp" line="20" lineEnd="20" colStart="27" colEnd="0" key="PrimaryLocation"/>
      </ReplacementDefinitions>

它挂起了:[“上传服务”]中的引号。关于如何避开这些引号以便XmlTextReader能够解析数据,您有什么想法吗?

您可以尝试使用更具容错性的html解析器(如)解析xml

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(xml);

var defs = doc.DocumentNode.Descendants("def")
        .ToDictionary(d=>d.Attributes["key"].Value,d=>d.Attributes["value"].Value);

一般规则是,如果您的数据不是XML,那么不要尝试使用XML工具来处理它。首先需要使用非XML工具将其预处理为格式良好的XML。详细的修复策略将取决于存在的故障的详细信息。Bummer-我用单引号检查了它,而不是在
Upload\u Service
周围用双引号,它可以正常加载。如果…你可以试试“上传服务”。但不知道它是否会起作用。根据我的经验,格式错误的xml的一个实例后面通常会有多个实例。我会愤怒地盯着制造它的人,而不是拼命去救它。我想我可能会用powershell偷偷地把它弄出来。我将文本提取到一个变量,但当我尝试将变量转换为XML时,我得到了相同的异常,我想这是有意义的,因为它可能在封面下使用了相同的.Net循环。问题中的XML至少可以通过
HtmlAgilityPack
加载,请参阅。您可能希望设置为保留XML节点和属性名称的大小写。结果将在属性列表中插入其他属性,如果您知道XML模式,则可以查找意外属性并将其名称和值附加到前面属性的值中,然后使用
doc.DocumentNode.OuterHtml
生成新的XML。
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(xml);

var defs = doc.DocumentNode.Descendants("def")
        .ToDictionary(d=>d.Attributes["key"].Value,d=>d.Attributes["value"].Value);