- - PR -
XSL変換時、XMLのDOCTYPE宣言を読み飛ばしたい
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-09-16 09:36
javax.xml.transform を利用してXMLを変換する際、
<!DOCTYPE Data SYSTEM data.dtd"> を読む際、DTDファイルに フルパスを設定しないと、 java.io.FileNotFoundException: (指定されたファイルが見つかりません。) となってしまうため、このDOCTYPE宣言を読み飛ばしたいのです。 XSL変換は以下の様に行っておりますが TransformerFactory transFactory = TransformerFactory.newInstance(); Transformer transformer = transFactory .newTransformer(new StreamSource(xslname)); Source source = new StreamSource(new InputStreamReader(inputStream)); Result result = new StreamResult(bos); transformer.transform(source, result); DOCTYPE宣言を読み飛ばしたり、できないものでしょうか? ご存知の方おられましたら、よろしくお願い致します。 | ||||||||
|
投稿日時: 2004-09-16 09:55
るぱんです。
新しいDocを作成し、そこにRootNodeをCloneします。 そのDocに対してXSLをあてるってだめですか? | ||||||||
|
投稿日時: 2004-09-16 10:09
XMLのDOCTYPE宣言が不良と解釈されてしまい
パースエラーになるため、Cloneを作るところまで 進んでいない状態です。 パースする前に、XMLファイルから、DOCTYPE宣言を物理的に文字列削除 してというのもあったのですが、わざわざファイルIOを起こさずに 読み飛ばせたらと思っております。 | ||||||||
|
投稿日時: 2004-09-16 10:36
るぱんです。
パーサーが認識しない以上APIからは使えないと思います。 API使用の前提条件覆してるわけですから。 data.dtdをコピーして一時的に同階層におくか、 ダミーで作るしかないんじゃないですか? | ||||||||
|
投稿日時: 2004-09-16 13:11
えー、自分は全然使った事がないので、外してるかもしれませんが。
や
を設定したらどうなります? やっぱりファイルの方が優先されるのかな? | ||||||||
|
投稿日時: 2004-09-16 15:16
文書構造検証だけでなく
エンティティの解釈に関連する ので、読み飛ばしや置き換えオプションなどは 無いと思います。PUBLICでなく、SYSTEM で普通では。 -------------------- 0バイトの .dtd を置くとか、リンクがあれば 通ると思います。 [ メッセージ編集済み 編集者: MMX 編集日時 2004-09-16 15:31 ] | ||||||||
|
投稿日時: 2004-09-16 15:40
>solunaさん
transformer.setOutputProperty(OutputKeys.STANDALONE, "yes"); transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, "フルパスのDTD"); これは、出力時の設定の様です。 パーサで読む場合にも、同じようなのがあれば良いのですが・・・・ >MMXさん おっしゃる様に、0バイトの .dtd を置くとか、リンクがあれば通ります。 実際に何が設定されても良いように、XML宣言すら読み飛ばしたいくらいの勢い でしたが、これが限界と思いました。 皆様、ありがとうございます。 | ||||||||
|
投稿日時: 2004-09-16 16:04
Ant の場合は XMLカタログが使えるようです
XMLカタログ http://www.jajakarta.org/ant/ant-1.5/docs/ant-1.5/j/docs/manual/CoreTypes/xmlcatalog.html -------------------------------------------------------- そのほか、簡単弁当でなく、peaser の材料から組み立てると peaser.setFeature("http://xml.org/sax/features/validation" , false); peaser.setFeature("http://apache/xml/features/novalidation/load-external-dtd" , false); ができるかも。 [ メッセージ編集済み 編集者: MMX 編集日時 2004-09-16 17:59 ] [ メッセージ編集済み 編集者: MMX 編集日時 2004-09-16 18:02 ] |