SAXでxmlタグの正しい開始/終了位置を取得するにはどうすればよいですか?

ウィンストンチェン:

SAXにはロケータがあり、現在の場所を追跡します。ただし、startElement()で呼び出すと、常にxmlタグの終了場所が返されます。

タグの開始位置を取得するにはどうすればよいですか?この問題を適切に解決する方法はありますか?

クリスチャン・ハンヒックス:

残念ながら、パッケージLocator内のJavaシステムライブラリによって提供されるインターフェイスはorg.xml.sax、ドキュメントの場所に関する詳細な情報を定義上許可していません。引用する文書getColumnNumber方法(ハイライトは私が追加):

メソッドからの戻り値は、診断のための概算としてのみ意図されています。元のXMLドキュメントの文字コンテンツを編集するための十分な情報を提供することは意図されていません。たとえば、行に結合文字シーケンス、ワイド文字、サロゲートペア、または双方向テキストが含まれている場合、値はテキストエディタの表示の列に対応しない場合があります

その仕様によると、SAXドライバーによるベストエフォートに基づいて、「ドキュメントイベントに関連付けられたテキストの後の最初の文字の位置」常に取得しますしたがって、質問の最初の部分に対する簡単な答えは次のとおりです。いいえ、これLocatorはタグの開始位置に関する情報を提供しませんまた、文書内のマルチバイト文字(中国語や日本語のテキストなど)を処理している場合、SAXドライバーから取得する位置は、おそらく希望どおりではありません。

タグの正確な位置を求めている場合、または属性、属性コンテンツなどについてさらに詳細な情報が必要な場合は、独自の位置プロバイダーを実装する必要があります。

すべての潜在的なエンコーディングの問題、Unicode文字などが関係しているため、これはプロジェクトとしては大きすぎてここに投稿できないと思います。実装は、特定の要件にも依存します。

個人的な経験からの簡単な警告:InputStreamSAXパーサーに渡すラッパーを書き込むことは危険です。SA​​Xパーサーがストリームから既に読み取った内容に基づいてイベントを報告するタイミングがわからないためです。

最初に情報を使用することに加えて、改行やタブなどをチェックすることにより、自分のcharacters(char[], int, int)メソッドで独自のカウントを行うことで、ドキュメント内の実際の場所がよくわかるようになります。最後のイベントの位置を覚えておくことで、現在のイベントの開始位置を計算できます。ただし、改行がすべて表示されるとは限らないことを考慮してください。改行は、には表示されないタグ内に表示される可能性がありますが情報からそれらを推定することはできます。ContentHandlerLocatorcharactersLocator

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Unityで開始x位置と終了x位置を取得するにはどうすればよいですか?

分類Dev

Pythonで文字列の開始位置と終了位置を設定するにはどうすればよいですか?

分類Dev

Androidで年の開始日と終了日を取得するにはどうすればよいですか?

分類Dev

行の開始として数字で始まり、5桁の数字で終わる文字列を取得するにはどうすればよいですか?

分類Dev

imgscalrでトリミングの開始位置を設定するにはどうすればよいですか?

分類Dev

RxJava:タスクを開始し、タスクが終了したら別のタスクを開始するにはどうすればよいですか?

分類Dev

forループをどこからでも開始し、同じ位置で終了するようにするにはどうすればよいですか?

分類Dev

ドラッグ可能なdivの開始位置を設定するにはどうすればよいですか?

分類Dev

Reactで開始タグと終了タグを使用してDOMコンポーネントを作成するにはどうすればよいですか?

分類Dev

Reactで開始タグと終了タグを使用してDOMコンポーネントを作成するにはどうすればよいですか?

分類Dev

GCの実行開始時にシグナルを取得するにはどうすればよいですか?

分類Dev

開始時刻と終了時刻を指定してタイムスタンプ正規表現を実行するにはどうすればよいですか?

分類Dev

アトムエディターでHTMLタグの開始と終了の両方を同時に変更するにはどうすればよいですか?

分類Dev

別のdiv内のdivのX量ごとに終了および開始divタグを追加するにはどうすればよいですか?

分類Dev

MySQLで週番号を使用して週の開始日と終了日を取得するにはどうすればよいですか?

分類Dev

PHPで開始文字と終了文字を使用して文字列の部分文字列を取得するにはどうすればよいですか?

分類Dev

Pythonで開始したプロセスを強制終了するにはどうすればよいですか?

分類Dev

データフレームの特定の期間の開始日と終了日を取得するにはどうすればよいですか?

分類Dev

複数の線を描画しましたが、開始座標と終了座標を取得するにはどうすればよいですか?

分類Dev

fbxメッシュの正しい位置を取得するにはどうすればよいですか?

分類Dev

PHPで今週の開始日と終了日を表示するにはどうすればよいですか?

分類Dev

SQL Serverの週番号を使用して週の開始日と終了日を取得するにはどうすればよいですか?

分類Dev

特定の位置でビデオの再生を開始するにはどうすればよいですか?

分類Dev

CGPointの開始と終了から長方形を指定するにはどうすればよいですか?

分類Dev

間隔[開始、終了]を等距離のn点に分割するにはどうすればよいですか?

分類Dev

DateTimeを1日の開始/終了に設定するにはどうすればよいですか?

分類Dev

Pythonで文字の開始と終了の出現を見つけるにはどうすればよいですか?

分類Dev

FlipClock.jsで開始/終了番号の値を使用してカウンターを設定するにはどうすればよいですか?

分類Dev

QTabWidget。1つのタブを正しい位置に移動するにはどうすればよいですか?

Related 関連記事

  1. 1

    Unityで開始x位置と終了x位置を取得するにはどうすればよいですか?

  2. 2

    Pythonで文字列の開始位置と終了位置を設定するにはどうすればよいですか?

  3. 3

    Androidで年の開始日と終了日を取得するにはどうすればよいですか?

  4. 4

    行の開始として数字で始まり、5桁の数字で終わる文字列を取得するにはどうすればよいですか?

  5. 5

    imgscalrでトリミングの開始位置を設定するにはどうすればよいですか?

  6. 6

    RxJava:タスクを開始し、タスクが終了したら別のタスクを開始するにはどうすればよいですか?

  7. 7

    forループをどこからでも開始し、同じ位置で終了するようにするにはどうすればよいですか?

  8. 8

    ドラッグ可能なdivの開始位置を設定するにはどうすればよいですか?

  9. 9

    Reactで開始タグと終了タグを使用してDOMコンポーネントを作成するにはどうすればよいですか?

  10. 10

    Reactで開始タグと終了タグを使用してDOMコンポーネントを作成するにはどうすればよいですか?

  11. 11

    GCの実行開始時にシグナルを取得するにはどうすればよいですか?

  12. 12

    開始時刻と終了時刻を指定してタイムスタンプ正規表現を実行するにはどうすればよいですか?

  13. 13

    アトムエディターでHTMLタグの開始と終了の両方を同時に変更するにはどうすればよいですか?

  14. 14

    別のdiv内のdivのX量ごとに終了および開始divタグを追加するにはどうすればよいですか?

  15. 15

    MySQLで週番号を使用して週の開始日と終了日を取得するにはどうすればよいですか?

  16. 16

    PHPで開始文字と終了文字を使用して文字列の部分文字列を取得するにはどうすればよいですか?

  17. 17

    Pythonで開始したプロセスを強制終了するにはどうすればよいですか?

  18. 18

    データフレームの特定の期間の開始日と終了日を取得するにはどうすればよいですか?

  19. 19

    複数の線を描画しましたが、開始座標と終了座標を取得するにはどうすればよいですか?

  20. 20

    fbxメッシュの正しい位置を取得するにはどうすればよいですか?

  21. 21

    PHPで今週の開始日と終了日を表示するにはどうすればよいですか?

  22. 22

    SQL Serverの週番号を使用して週の開始日と終了日を取得するにはどうすればよいですか?

  23. 23

    特定の位置でビデオの再生を開始するにはどうすればよいですか?

  24. 24

    CGPointの開始と終了から長方形を指定するにはどうすればよいですか?

  25. 25

    間隔[開始、終了]を等距離のn点に分割するにはどうすればよいですか?

  26. 26

    DateTimeを1日の開始/終了に設定するにはどうすればよいですか?

  27. 27

    Pythonで文字の開始と終了の出現を見つけるにはどうすればよいですか?

  28. 28

    FlipClock.jsで開始/終了番号の値を使用してカウンターを設定するにはどうすればよいですか?

  29. 29

    QTabWidget。1つのタブを正しい位置に移動するにはどうすればよいですか?

ホットタグ

アーカイブ