私はwoodstoxを使ってXMLファイル用のStAXパーサを実装しています。私は、ファイルシステムの共通のディレクトリのどこかにDTDが一致する有効なXMLファイルがあると仮定します。次のように相対的なシステム識別子の宣言を使用して、そのDTDに相対システムDTDをStAXパーサーにロードする方法は?
/path/to/test.xml
/path/to/test.dtd
XML参照:検証の観点から
<!DOCTYPE test SYSTEM "test.dtd">
は、すべてが私には罰金です。 (それは?xmllintは文句を言うことはありません)しかし、下のコードでファイルを解析しようとすると、woodstoxは相対DTDファイルを見つけることができないのでjava.io.FileNotFoundExceptionをスローします。実装は、XMLファイルオブジェクトに対してではなく、作業ディレクトリを基準にしてDTDファイルにアクセスしようとしているようです。
import java.io.FileInputStream;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamReader;
public class Test {
public static void main(String[] args) throws Exception {
FileInputStream fileInputStream = new FileInputStream(args[0]);
XMLInputFactory xmlInputFactory = XMLInputFactory.newFactory();
XMLStreamReader xsr = xmlInputFactory.createXMLStreamReader(fileInputStream);
while(xsr.hasNext()) {
if(xsr.next() == XMLStreamConstants.DTD) {
System.err.println(xsr.getText());
}
}
}
}
- これは意図的なものですか?
- StAXパーサに、作業ディレクトリからの相対ではなく、指定されたXMLファイルを基準としてDTDを読み込むようにするには便利な方法はありますか?