2011-01-31 4 views
0

Я использую пакет org.w3c.dom для разбора gml-схем (http://schemas.opengis.net/gml/3.1.0/base/).Плохие символы при разборе GML в Java

Когда я разбираю схему gmlBase.xsd, а затем сохраняю ее обратно, символы кавычек вокруг GeometryCollections в сложном типе BagType выходят из строя с плохими символами (см. Код ниже).

Есть ли что-то не так, как я разбираю или сохраняю xml, или есть что-то в схеме, которая выключена?

Спасибо,

Curtis

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». Мое приложение будет развернутым веб-приложением. У меня нет возможности изменять свойства системы. – Curtis

+0

@Curtis: Вы не должны полагаться на какую-либо фиксированную кодировку. Вам особенно нужно получить схему как строку? –

+0

Я хотел бы записать схему в файл, чтобы ее можно было просмотреть позже. Тем не менее, возможно, мне придется изменить некоторые элементы xml, прежде чем я его выпишу, поэтому я сначала разбираю его с DocumentBuilder. Как я могу это сделать, не полагаясь на кодировку? Исходный код не указывал какую-либо кодировку, и файл выходит неверно. – Curtis

Смежные вопросы