3

これまでのところ、私がやっていることは次のとおりです。

try 
{
    XmlDocument xmldoc = loadXml(orderFilePath);
}
catch (XmlException exception)
{
    //... blah blah - there was an error, let the user know
}

しかし、とにかくファイルを解析できるようにしたいと思っています。「不正な形式」と言うとき、閉じられていないタグまたは要素があることを必ずしも意味するわけではありませんが、要素の値に含まれる次のいずれかのようなものがある可能性があります: '<'、'>'、'&'

おそらく XmlReader を使用する必要があると言及されているのを見てきましたが、それでもその要素で例外がスローされるか、何らかの方法で問題を修正できるでしょうか?

ソースで XML を修正することが最善の解決策であることはわかっていますが、XML がどこから来ているのかは制御できません。

ありがとう!

編集:

XML の非常に単純な例:

<Order>
  <Customer_ID>555-555-5555</Customer_ID>
  <ShipToAddress>
    <Customer_Name>Some Guy</Customer_Name>
    <Street>123 Fake Dr.</Street>
    <Street2></Street2>
    <City>West Palm Beach</City>
    <State>FL</State>
    <ZipCode>33417</ZipCode>
    <Country>United States</Country>
  </ShipToAddress>
  <BillToAddress>
    <Customer_Name>Some Guy</Customer_Name>
    <Street>123 Fake Dr.</Street>
    <Street2></Street2>
    <City>West Palm Beach</City>
    <State>FL</State>
    <ZipCode>33417</ZipCode>
    <Country>United States</Country>
  </BillToAddress>
  <items>
    <item>
      <Product_ID>25101</Product_ID>
      <Product_Name></Product_Name>
      <Quantity>1</Quantity>
      <USPrice>26.95000</USPrice>
    </item>
  </items>
<!-- bad stuff here -->
<How_did_you_hear_about_us>Coffee & Tea magazine</How_did_you_hear_about_us>
<!-- bad stuff here -->
</Order>

問題は、それが常に同じ場所にあるかどうかは必ずしもわかりません。

4

2 に答える 2

4

1 つのアプローチは、解析する前にいくつかのことを検証することです。正規表現を使用して XML タグを検証することもできますが、おそらくもっと簡単なのは、Stackevery<>記号を追加することです。その後、それをループして、同じシンボルを2回続けて取得しないことをアサートします。

ここで疑問が生じます: と をどのように区別します<MyElement>><MyEl>ement>?

ただし、これはかなりあいまいです。XML が無効であることが判明した場合、どうしたいですか? この前処理の検証をどこまで行いますか?

ここでの最良の選択肢は、先に進まないことだと思います。不正な形式の XML がスローされた場合、すべての問題を修正することはできません。ユーザーに通知して、それを終わらせた方がよい場合もあります。

ソースが一貫して不正な XML を送信している場合は、メンテナーに連絡するか、代替手段を探す必要があります。

于 2013-10-10T20:41:07.097 に答える
1

他の人が述べたように、ここで行うべきことがいくつかあります。

ステップ 1 - XML の形式が正しくないかどうかを調べます。要素と値 (または属性) の両方の解決策: 正規表現を使用するか、文字列ビルダーを介して読み込み、文字を解析/検索します (正規表現は常に優れています)

ステップ 2: 特定の要素が常に発生していることを検証する場合は、XSD を作成することもできます (最低限)。ワークフローに基づく - それらが表示されない場合 - エラーをスローできます - ワークフローによって異なります

ステップ 3: XML を解析/修正したら、値を使用する必要があります

于 2013-10-10T20:53:01.877 に答える