2009-03-03 4 views
1

C#では、ドキュメントがファイルや文字列から読み込まれたときに元のXML 'text'のXmlNodeの位置を計算する方法はありますか?私は、処理中のXML文書で問題を報告できるようにしたい。XMLの解析時にノードの 'row'と 'column'にアクセスする方法

例:

「foo.xmlでのエラー - 属性の値が 『ペットは』 [...ここに元のXMLテキストのスニペット]欄13、27行で、ふわふわの哺乳動物の種でなければなりません「

編集: チェックはスキーマ検証を使用して行うことはできません。 「指定されたアドインタイプ「Addins.LogWindow」は公開されている必要があります」

答えて

1

申し訳ありませんが、あなたのためのノードの元解析された場所を覚えています非常に少数のDOMの実装があります。ほとんどの場合、解析エラーに関する位置情報のみが報告されます。たとえば、DOM Level 3 LSでは、DOMErrorがある場合にのみDOMLocatorへの参照が得られます。

私が知っている知っている唯一のインパクトは、解析後のトラックをpxdomとしています。これはPythonにとっては大したことではありません。

2

あなた自身のXmlParserを書くべきではありませんが、Compact Frameworkでは、XmlDocumentはケラチンのDalai Lamaほど遅いので、Xmlファイルを解析するときにXmlReaderを使用します。

何か混乱したり矛盾したものが見つかったときに例外をスローし、XmlReaderを例外に渡します。次に、XmlReaderを、行と位置のプロパティを含むIXmlLineInfoオブジェクトにキャストして、行位置を抽出することができます。

これが役立つかどうかわかりません。一般的に私はデスクトップ上に私自身のXmlParserを書いているわけではないでしょう。

+0

Aha。 XmlNodeの位置が兄弟と親(ルート要素まで)に対してXmlTextReaderを使用して、その要素がファイル内にある場所を特定できることを考えれば、私は考えています。 つまり、ルート要素の2番目の要素の3番目の要素 - >これをXmlTextReaderで読み取ってposを取得します。 – mackenir

+0

最初にXmlReaderを使用して解析すると、私はもっと考えていました。どのオブジェクトをXMLの解析と検証に使用していますか?それはXmlDocumentですか? – Quibblesome

+0

ああ、いいえ... XmlReaderはあまりにもXMLファイルを読むのには使いにくいです:)。私は自分のスキームを手に入れました。ドキュメントを解析する簡単な作業はXmlDocumentで行い、次にXmlTextReaderを使用する要素の位置を取得します。私はある時点でこのQをAで更新します - それは「十分に良い」解決です。 – mackenir

関連する問題