2012-10-23 33 views
3

我有以下第三方XML包含格式错误的XML片段,我想用XmlTextReader通读它。格式错误的XML中的属性转义内部引号

<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的是抛出异常: “Upload_Service”]:

'Upload_Service' is an unexpected token. Expecting white space. Line 44126, position 123. 

其得到的挂了引号。关于如何将这些引号转义以便XmlTextReader可以解析数据的任何想法?

+0

的一般规则是,如果你的数据不是XML,那么就不要尝试使用XML工具来处理它。您需要使用非XML工具将其先预处理为格式良好的XML。详细的维修策略将取决于现有故障的细节。 –

+0

Bummer - 我用单引号检查它,而不是''Upload_Service'周围的双引号',它加载正常。如果仅... – David

+0

您可以尝试"上传服务"。不知道它是否会工作。根据我的经验,一个畸形的xml实例通常会跟着几个实例。我会愤怒地盯着制作这个的人,而不是努力拯救它。 –

回答

0

您可以尝试使用HTML解析器来分析XML(如HtmlAgilityPack),这是更高的容错能力。

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);