2016-10-09 2 views
-1

byte[] peekここで、peekはテキストファイルのNバイトです。peekがXMLであるかどうかを確認するにはどうすればよいですか?テキストファイルの最初のNバイトが与えられた場合、これらのバイトがXMLであるかどうかを調べる方法は?

文字列の先頭にある<を確認するだけで十分ですか?

+3

これは[仕様書](https://www.w3.org/TR/xml/)に詳しく記載されています。 –

+2

* "文字列の先頭に<をチェックするだけで十分ですか?" –

+0

私は 'Fの文字エンコーディングの自動検出(非規範的)'セクションでそれを見つけました –

答えて

2

XML標準によれば、ファイルが<?xmlを使用して、XMLであるかどうかを判断できるようにする必要があります。その勧告に従わないことを選択した場合、信頼できる方法はありません。非XMLファイルの中には、小Nバイトを調べる(<で始まる)テストに合格するものがあります。他はしません。また、有効なXMLファイルはUnicode BOM文字で始まる場合があるので、先に進んでこれを試してみる場合は、そのことを考慮に入れてください。

2

特定の文字列がXML形式であることを確認するには、パーサーが必要です(Javaの場合はthis)。これは、正確な答えを得るための唯一の方法です。

<?xmlが有効なXMLであるかどうかを確認するために、最初の数バイトを確認してください。しかし、あなたは最後までそれを解析するまで絶対に確信することはできません。

+0

私は 'N'バイトしか持っていません。私のユースケースのXMLファイルの大半は、 ''がありません。このファイルは ' ' –

+0

のように始まります。これまで私が持っていたものはすべてです:' String peekStr = new String(peek); peekStr.contains( "<?xml")|| peekStr.contains( "<") ' –

+0

@NicholasDiPiazza文字列の長さに関わらず、それをXMLとして検証するには、それをすべて読む必要があります。最初のバイトだけを読み込み、 ''を見ると、「大丈夫、最初はXMLのように見える」と言うことができます。これらの数バイトを超えると、不正な形式のデータが存在する可能性があります。このタイプのチェックは安全ではありません。 – augur

関連する問題