2011-01-31 5 views
0

org.w3c.domパッケージを使用してgmlスキーマ(http://schemas.opengis.net/gml/3.1.0/base/)を解析しています。JavaでGMLを解析するときに不正な文字が表示される

gmlBase.xsdスキーマを解析してから保存すると、BagType複合型のGeometryCollectionsの引用文字が不正な文字に変換されてしまいます(下記のコードを参照)。

XMLを解析したり保存したりするときに何か問題がありますか?それとも、スキーマ内に何かオフになっていますか?

おかげで、

カーティス

public static void main(String[] args) throws IOException 
{ 
    File schemaFile = File.createTempFile("gml_", ".xsd"); 
    FileUtils.writeStringToFile(schemaFile, getSchema(new URL("http://schemas.opengis.net/gml/3.1.0/base/gmlBase.xsd"))); 
    System.out.println("wrote file: " + schemaFile.getAbsolutePath()); 
} 

public static String getSchema(URL schemaURL) 
{ 
    try 
    { 
     DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder db = dbf.newDocumentBuilder(); 
     Document doc = db.parse(new InputSource(new StringReader(IOUtils.toString(schemaURL.openStream())))); 
     Element rootElem = doc.getDocumentElement(); 
     rootElem.normalize(); 

     TransformerFactory tFactory = TransformerFactory.newInstance(); 
     Transformer transformer = tFactory.newTransformer(); 

     DOMSource source = new DOMSource(doc); 
     ByteArrayOutputStream xmlOutStream = new ByteArrayOutputStream(); 
     StreamResult result = new StreamResult(xmlOutStream); 
     transformer.transform(source, result); 
     return xmlOutStream.toString(); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 

    return ""; 
} 

答えて

1

私は、この行の不審なよ:

Document doc = db.parse(new InputSource(
    new StringReader(IOUtils.toString(schemaURL.openStream())))); 

私はIOUtils.toStringがここで何をするか知らないが、おそらく、それは特定のエンコーディングを想定しています、 XML宣言を考慮することなく。

理由だけではなく、使用しない:

Document doc = db.parse(schemaURL.openStream()); 

同様に、あなたのFileUtils.writeStringToFileはどのエンコーディングそれは使用してい...文字エンコーディングを指定するには、表示されず、なぜエンコーディングはStreamResultにありますか?

+0

あなたは何かをしています。システムプロパティ "file.encoding"を "UTF-8"に変更すると、すべてが期待通りに機能します。しかし、私は "file.encoding"プロパティを設定せずにそれを行う方法を理解することはできません。私のアプリは配備されたWebアプリになります。私はシステムのプロパティを変更する能力がありません。 – Curtis

+0

@Curtis:固定エンコードに頼るべきではありません。特にスキーマを文字列として取得する必要がありますか? –

+0

スキーマをファイルに書き出して、後で見ることができるようにしたいと思います。しかし、XML要素を書き出す前にXML要素の一部を変更する必要があるかもしれません。そのため、まずDocumentBuilderで解析します。エンコーディングに頼らずにどうすればいいですか?元のコードではエンコードが指定されておらず、ファイルが無効になっています。 – Curtis

関連する問題