2011-09-14 93 views
1

我不得不分析用户文档,有时他们不是很好格式。它可能包含空格之前的标签或其他issue.how我可以使他们良好的形成或如果这是不可能的我怎么能忽略所有异常? 我也收到有关字节标记顺序的例外情况,因为文档采用UTF-16编码,但没有字节标记,我也不能添加任何文件,因为它们是用户文件。有没有办法忽略所有的xml解析异常?

好的,有谁能告诉我这个样本数据有什么问题吗? (这是从设备文档的说明:本协议产生的所有交易将通过使用XML文件来执行本文档中描述的XSD 一致。)

 <?xml version="1.0" encoding="UTF-16"?> 
    <PROTOCOLE_HEMATO_BIOCODE InstrumentCode="2" InstrumentType="Diana 5 Evolution" SerialNumber="Ns" Version="C4.06" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <PROTOCOL_DATA> 
    <RESULT> 
    <INFORMATION> 
    <PATIENT DoB="2011-08-03" FirstName="ALI" Location="" MedicalDoctor="" Name="NAVIDI" PatientCommentary="" PID="" RefTable="1" SID="1059"/> 
    </INFORMATION> 
    <DATAS DateTimeAnalyse="2011-08-03T11:36:11Z" IdOpAnalyse="Service" UnitsSytem="US"> 
    <PARAMETER IDParametre="0" LowerRefLimit="4" Nom="WBC" Statut_Limits="48" Units="K/µL" UpperRefLimit="10" Value="4.6"/> 
    <PARAMETER IDParametre="1" LowerRefLimit="20" Nom="Lym%" Statut_Limits="48" Units="%" UpperRefLimit="45" Value="37.8"/> 
    <PARAMETER IDParametre="2" LowerRefLimit="2" Nom="Mon%" Statut_Limits="48" Units1111="%" UpperRefLimit="8" Value="6"/> 
    <PARAMETER IDParametre="3" LowerRefLimit="40"Nom="Neu%" Statut_Limits="48" Units="%" UpperRefLimit="75" Value="51.8"/> 
    <PARAMETER IDParametre="4" LowerRefLimit="0" Nom="Bas%" Statut_Limits="48" Units="%" UpperRefLimit="3" Value="0"/> 
    <PARAMETER IDParametre="5" LowerRefLimit="1" Nom="Eos%" Statut_Limits="48" Units="%" UpperRefLimit="7" Value="4.4"/> 
    <PARAMETER IDParametre="7" LowerRefLimit="1.5" Nom="Lym#" Statut_Limits="48" Units="K/µL" UpperRefLimit="4.5" Value="1.7"/> 
    <PARAMETER IDParametre="8" Nom="Mon#" Statut_Limits="48" Units="K/µL" UpperRefLimit="0.8" Value="0.28"/> 
    <PARAMETER IDParametre="9" LowerRefLimit="2" Nom="Neu#" Statut_Limits="48" Units="K/µL" UpperRefLimit="7.5" Value="2.4"/> 
    <PARAMETER IDParametre="10" Nom="Bas#" Statut_Limits="48" Units="K/µL" UpperRefLimit="0.2" Value="0"/> 
    <PARAMETER IDParametre="11" Nom="Eos#" Statut_Limits="48" Units="K/µL" UpperRefLimit="0.6" Value="0.2"/> 
    <PARAMETER IDParametre="21" LowerRefLimit="4.5" Nom="RBC" Statut_Limits="48" Units="M/µL" UpperRefLimit="6.2" Value="5.11"/> 
    <PARAMETER IDParametre="22" LowerRefLimit="12" Nom="Hb" Statut_Limits="48" Units="g/dL" UpperRefLimit="18" Value="16.2"/> 
    <PARAMETER IDParametre="23" LowerRefLimit="35" Nom="Hct" Statut_Limits="48" Units="%" UpperRefLimit="54" Value="48.8"/> 
    <PARAMETER IDParametre="24" LowerRefLimit="80" Nom="MCV" Statut_Limits="51" Units="fL" UpperRefLimit="95" Value="95.5"/> 
    <PARAMETER IDParametre="25" LowerRefLimit="27" Nom="MCH" Statut_Limits="48" Units="pg" UpperRefLimit="32" Value="31.7"/> 
    <PARAMETER IDParametre="26" LowerRefLimit="32" Nom="MCHC" Statut_Limits="48" Units="%" UpperRefLimit="36" Value="33.2"/> 
    <PARAMETER IDParametre="27" LowerRefLimit="11" Nom="RDW-cv" Statut_Limits="48" Units="%" UpperRefLimit="15" Value="10.6"/> 
    <PARAMETER IDParametre="28" Nom="RDW-sd" Statut_Limits="48" Units="fL" Value="33.9"/> 
    <PARAMETER IDParametre="29" LowerRefLimit="150" Nom="Plt" Statut_Limits="48" Units="K/µL" UpperRefLimit="500" Value="200"/> 
    <PARAMETER IDParametre="30" LowerRefLimit="6" Nom="MPV" Statut_Limits="48" Units="fL" UpperRefLimit="10" Value="7.3"/> 
    <PARAMETER IDParametre="31" Nom="Pct" Statut_Limits="48" Units="%" Value="0.15"/> 
    <PARAMETER IDParametre="32" Nom="PDW" Statut_Limits="48" Units="%" Value="8.4"/> 
    <PARAMETER IDParametre="33" Nom="Lx" Statut_Limits="48" Units=" " Value="20"/> 
    <PARAMETER IDParametre="34" Nom="Ly" Statut_Limits="48" Units=" " Value="16"/> 
    <PARAMETER IDParametre="35" Nom="Nx" Statut_Limits="48" Units=" " Value="59"/> 
    </DATAS> 
    <TRACABILITE IDOpValidation="" ModeleAnalyseur="Diana 5 Evolution" SerialNumber="" VersionCalcul="C4.06" VersionPackage="V6.26"> 
    <REACTIF ExpirationDate="2014-07-31" Lot="562" Product="HEMATON-5    "/> 
    <REACTIF ExpirationDate="2014-05-04" Lot="12452" Product="HEMACORE    "/> 
    <REACTIF ExpirationDate="2013-07-03" Lot="73049" Product="HEMALYSE-5    "/> 
    <FACTEUR_CALIBRATION FactorDate="2011-07-31" FactorValue="1" IDParametre="0" ParameterName="WBC"/> 
    <FACTEUR_CALIBRATION FactorDate="2011-07-31" FactorValue="1" IDParametre="21" ParameterName="RBC"/> 
    <FACTEUR_CALIBRATION FactorDate="2011-07-31" FactorValue="1" IDParametre="22" ParameterName="Hb"/> 
    <FACTEUR_CALIBRATION FactorDate="2011-07-31" FactorValue="1" IDParametre="24" ParameterName="MCV"/> 
    <FACTEUR_CALIBRATION FactorDate="2011-07-31" FactorValue="1" IDParametre="29" ParameterName="Plt"/> 
    <FACTEUR_CALIBRATION FactorDate="2011-07-31" FactorValue="1" IDParametre="30" ParameterName="MPV"/> 
    </TRACABILITE> 
    <IMAGE DataSize="6676" ImageType="3"> 
    <IMAGE_DATA>AQAAA 
    </IMAGE_DATA> 
    </IMAGE> 
    </RESULT> 
    </PROTOCOL_DATA> 
    </PROTOCOLE_HEMATO_BIOCODE> 

回答

0

只是要清楚:

  • 仅仅因为一些看起来像XML并不意味着它 XML。如果您的文档不是格式良好的XML文档,则它不是XML文档。从the specification

的数据对象是XML文档如果是well-formed

  • 如果你的文档没有XML那么你就不能使用XML解析器解析

如果它只是一个编码问题,那么您可以在读取文件时指定编码:

using (StreamReader reader = new StreamReader("myfile.xml", Encoding.Unicode)) 
{ 
    XmlDocument doc = new XmlDocument(); 
    doc.Load(reader); 
} 

以上将使用小端字节顺序加载带有UTF-16格式的文件“myfile.xml”。

+1

我倾向于不同意。如果格式良好的XML将等于XML,那么就不需要称之为良好的格式。所以“良构”这个术语意味着确实存在一种XML格式。另外,如果用C#编写的代码包含单一的错误行,则不会用C#编写代码。另外,如果Armin没有使用XML这个术语,我们甚至都不知道他在说什么。 –

+0

@Sascha“XML文档”是“格式良好的XML文档”的简称。我们指定“格式良好”的唯一原因是所有似乎认为其中包含尖括号的内容都是XML文档的人。 – Justin

+0

我知道你在@Justin得到什么,在这方面你是对的。重要的一点是区分机器之间或人与人之间的通信。在试图分析文档的应用程序环境中,您的陈述是绝对正确的(如果我认为是C#代码,那么编译器肯定会抱怨)。我更多地阅读它,“不要把它称为XML,因为W3C推荐标准否则”。 - 但显然你的意思是第一种提到的方式。 –

1

您可以编写(或看在互联网上)XML清洁器的方法,类或库。基本上你需要清理XML行(删除空格等),然后才能正确解析它。可能你现在所拥有的甚至不能称为XML。

+0

在这种情况下,我最好把它解析为一个简单的文本。对于我来说,这不是一个选项。标签已经到位并且匹配了,但是一些标签可能已经无法匹配了,我想忽略它们。 – armin

+0

但是,难道你不能只是打开文件并逐行读取它,而不是你遇到的每一行删除空格,添加错过的标签等?没有看到问题。也许添加一些例子XML? –

+0

根据xml的复杂性,添加缺失标记可能相当困难。你会如何确定是否有嵌套元素或结束标记丢失? –

0

你可以尝试使用SAX为.NET,可在 http://saxdotnet.sourceforge.net

这不是一个解析文档的API,而是标签解析,所以它不应该扔在形成未格式良好的XML异常文档。但是你必须编写所有的逻辑来自己处理标签。

相关问题