2011-09-14 12 views
1

ユーザ文書を解析しなければならない場合があります。タグやその他の問題の前にスペースが含まれていることがあります。これらのフォームをうまく作成できますか、これが不可能な場合はどうすればすべての例外を無視できますか? ドキュメントはUTF-16エンコーディングであるがバイトマークはないので、バイトマークの順序に関する例外が発生します。ユーザーファイルであるため、ドキュメントを追加できません。xml解析例外をすべて無視する方法はありますか?

さて、このサンプルデータで何が問題なのか教えてもらえますか? (これは、デバイスのマニュアルからの注意事項は以下のとおりです。このプロトコルによって生成されたすべての交換は、この文書で説明するXSD に準拠したXMLファイルを使用することによって行われる。)

 <?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から:それはwell-formed

    • であれば、あなたの文書がXMLではありません、あなたはXMLパーサ
    • を使用してそれを解析することができない場合

    データオブジェクトは、XMLドキュメントです

単なるエンコードの問題の場合は、ファイルを読み取るときにエンコードを指定できます。

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

リトルエンディアンのバイトオーダーを使用して、ファイル "myfile.xml"をUTF-16形式でロードします。

+1

私は同意しがちです。うまく形成されたXMLがXMLに等しいならば、それを整形式と呼ぶ必要はありません。だから、「よく形成された」という言葉は、実際にはうまく形成されないXMLの形を意味しています。また、C#で書かれたコードは、1つのエラーのある行が含まれているとC#で書かれていないとは言わないでしょう。また、ArminがXMLという言葉を使っていなかったなら、私たちは皆、彼が何を話しているのか知っていました。 –

+0

@Sascha「XML文書」は、「整形式XML文書」の略です。私たちが "整形式"と指定する唯一の理由は、その中に角かっこがあるものはXMLドキュメントだと思っているすべての人々のためです。 – Justin

+0

あなたは@ジャスティンで何を得ているのか知っています。この点であなたは正しいです。重要なポイントは、マシン間または人間間の通信を区別することです。アプリケーションの文脈では、あなたの文は絶対に真実です(そして、私がC#コードであると信じているものにエラーがあるならば、コンパイラは確かに文句を言うでしょう)。私は、W3Cの勧告では別の言い方をしているので、XMLと呼んではいけません。 - しかし明らかに、それは最初に言及された方法を意味しました。 –

1

あなたが書く(または見ることができますXMLサニタイザーメソッド、クラス、またはライブラリーをインターネット上で公開しています。基本的には、正しく解析する前に、行単位でXMLを一掃する必要があります(空白などを取り除く)。おそらくあなたが今持っているものは、XMLとは言えません。

+0

この場合、単純なtext.sanitizingは私のhere.theタグの場所ではなく、match.butいくつかのタグが残っている可能性がありますので、それらを無視したいかもしれません。 – armin

+0

しかし、ファイルを開いて行単位で読み込むことはできません。また、空白を削除したり、欠落しているタグを追加したりします。問題は見られない。たぶんいくつかのXMLサンプルを追加しますか? –

+0

xmlの複雑さによっては、欠落しているタグを追加するのは非常に困難です。ネストした要素があるのか​​、終了タグがないのかはどうしたら分かりますか? –

0

あなたはそれが、整形式でないXMLの例外をスローしてはならないので、それは、むしろ、タグ解析、文書の構文解析APIはありません http://saxdotnet.sourceforge.net

で入手可能な、.NET用のSAXを使用しようとすることができますドキュメント。しかし、タグを自分で処理するためのすべてのロジックを記述する必要があります。

関連する問題