0

このようなXmlStringReaderを使用して間違ったXMLコードを解析しようとしています。

<Page CODE=""L"" page Caption=""Example""><Cell CellType="0"...></Cell></Page>

このコードを使用して、セルタグのセルタイプ属性から値を取得しようとします。

        Using reader As XmlReader = XmlTextReader.Create(New StringReader(l.Label), New XmlReaderSettings With {
                                                     .ValidationType = ValidationType.None,
                                                     .XmlResolver = Nothing})
               While (reader.ReadToFollowing("Cell"))
            reader.MoveToAttribute("CellType")
            Select Case Int32.Parse(reader.Value)
                  ...
            End Select
        End While

したがって、次のXmlExceptionが発生します

「キャプション」は予期しないトークンです。期待されるトークンは'='です

この例外を回避する方法はありますか?または、間違って書かれた属性を修正するために、この前にxmlを解析する必要がありますか?

ありがとう

4

2 に答える 2

3

この前にxmlを解析して、属性の間違った書き込みを修正する必要がありますか?

XML ではありません。これは XML に少し似ていますが、実際にはそうではありません。XML API で非 XML を読み取ろうとしないでください。それは失敗するでしょうし、そうあるべきです。

理想的には、最初に疑似 XML を生成するものをすべて修正します。

于 2012-07-26T12:10:15.043 に答える
0

パーサーの普遍的なルールは、パーサーが記述されている仕様に基づいて入力が有効であると想定することです。XML パーサーの場合、有効な XML コードを渡して解析することを前提としています。

この場合、XML では属性の名前にスペースを含めることが許可されていないため、そうではありません。page Captionは有効な属性識別子ではないため、パーサーはおそらくpage属性識別子として解釈し、スペースを区切り文字として扱い、どうすればよいか考えていCaptionます。

ただし、例外を「修正」することはできません。パーサーは完全に混乱しており、あきらめています。どうにか無理矢理続けさせたとしても、結果の正当性を保証する方法はありません。誰かが本を読んで句読点をすべて取り除いたようなものです。あなたはそれを理解できなかったので、おそらく欲求不満でそれを置くでしょう. しかし、とにかく誰かに強制されて読むように強要された場合、多くの場合、間違った意味を理解することになるでしょう。この問題を解決する唯一の方法は、パーサーが理解できる入力を与えることです。

そのため、パーサーで XML を実行する前に、XML が有効であることを確認する必要があります。この XML はどこから取得していますか? 有効な識別子を使用し、XML スキーマに適切に準拠するように、生成プロセスを修正できますか?

于 2012-07-26T12:14:56.473 に答える