0

ADODB を使用して VB6 アプリケーションで生成された XML ファイルを .Net アプリケーションにロードしようとしています。これらの XMl ファイルの一部には無効な文字が含まれており、.Net 側でエラーをスローしますが、元の VB6 アプリケーションを介して完全に正常にロードされます。例えば

VB6 コード (これは正常に動作します):

Dim xmlDoc As MSXML.DOMDocument
xmlDoc.Load(XMLfilename)

C# コード (「john」は予期しないトークンであるというエラーがスローされます)

XmlDocument xmlDoc = new XmlDocument();
xmlDoc .Load(XMLfilename);

これは、エラーをスローする行の例です: 'Cliff' は予期しないトークンです。空白を期待する

<rs:data>
<z:row ID="1234" ENRODATE="2010-11-12" LastName="Van "Cliff" Anderson" FirstName="Mark" GENDER="MALE"/>
</rs:data>

上記が有効な XML ではないことは理解していますが、VB6 はこれを問題なく受け入れます。このような問題に対処する方法はありますか?

4

2 に答える 2

2

Cliff の前後に余分な引用符があり、無効な XML 構文を引き起こしている

LastName="ヴァン "クリフ" アンダーソン"

どうやら VB6 パーサーはこれを何とか許していたようです。引用符を削除するか、適切にエスケープする必要があります。

于 2012-06-28T19:44:35.530 に答える
1

この問題を解決するには、XML を分析する必要があります。

LastName="Van "Cliff" Anderson"- LastName を終了する " char があるため無効です。LastName = "Van " があり、有効ではない Cliff" Anderson" があります。

この問題を解決するには、この属性の開始とこの属性の終了を検索する必要があります LastName = (開始)"Van "Cliff" Anderson"(終了)。

VB6 から生成された XML を属性を使用しないように変更する必要がありますが、新しい XML Element を使用します<LastName>Van "Cliff" Anderson"<\LastName>。VB6 からの出力を変更できない場合は、実行する前に手動で変更する必要がありますxmlDoc .Load(XMLfilename);

結果の XML:

 <z:row ID="1234" ENRODATE="2010-11-12" FirstName="Mark" GENDER="MALE">
     <LastName>Van "Cliff" Anderson<\LastName>
 <\z:row>
于 2012-06-28T20:02:14.070 に答える