Я использую пакет 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 "";
}
Вы на что-то. Если я изменю системное свойство «file.encoding» на «UTF-8», все будет работать так, как ожидалось. Однако я не могу понять, как это сделать, не устанавливая свойство «file.encoding». Мое приложение будет развернутым веб-приложением. У меня нет возможности изменять свойства системы. – Curtis
@Curtis: Вы не должны полагаться на какую-либо фиксированную кодировку. Вам особенно нужно получить схему как строку? –
Я хотел бы записать схему в файл, чтобы ее можно было просмотреть позже. Тем не менее, возможно, мне придется изменить некоторые элементы xml, прежде чем я его выпишу, поэтому я сначала разбираю его с DocumentBuilder. Как я могу это сделать, не полагаясь на кодировку? Исходный код не указывал какую-либо кодировку, и файл выходит неверно. – Curtis