Плохие символы при разборе GML в Java - PullRequest
0 голосов
/ 31 января 2011

Я использую пакет org.w3c.dom для анализа схем gml (http://schemas.opengis.net/gml/3.1.0/base/).

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

Что-то не так с тем, как я анализирую или сохраняю 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 Ответ

1 голос
/ 31 января 2011

Я с подозрением отношусь к этой строке:

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

Я не знаю, что здесь делает IOUtils.toString, но, по-видимому, он предполагает определенную кодировку без учета декларации XML.

Почему бы просто не использовать:

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

Аналогично, ваш FileUtils.writeStringToFile не указывает кодировку символов ... какую кодировку он использует и почему кодировка указана в StreamResult?

...