в потоці кодування і реальною кодування XML-файла. Як вже говорилося вище, щоб прочитати за допомогою Xerces XML-файл у довільній кодуванні потрібно, по перше, використовувати потоки байтів, а по друге, встановити спеціальний feature. На щастя ця можливість передбачена в Castor. Для цього потрібно скопіювати файл castor.properties (взяти його можна з каталогу orgexolabcastor у файлі castor-0.9.3-xml.jar) в підкаталог lib в JRE, і встановити там змінну org.exolab.castor.sax.features. Приклад:
# Comma separated list of SAX 2 features that should be enabled
# for the default parser.
#
# org.exolab.castor.features =
org.exolab.castor.sax.features =
Варто відзначити, що за замовчуванням там стоїть мінлива org.exolab.castor.features, але це, очевидно, друкарська помилка - якщо подивитися в вихідні коди, то там аналізується org.exolab.castor.sax.features (це справедливо для Castor версії 0.9.3 від 03.07.2001). Приклад читання з використанням потоків байтів:
public static Object load (Class cls, String mappingFile, InputStream is)
throws Exception
{
Mapping mapping = loadMapping (cls, mappingFile);
Unmarshaller unmarshaller = new Unmarshaller (cls);
unmarshaller.setMapping (mapping);
return unmarshaller.unmarshal (new InputSource (is));
}
Для створення XML-файлів необхідно правильно вказати формат для Xerces. Приклад:
public static void save (Object obj, String mappingFile, OutputStream os, String encoding)
throws Exception
{
Mapping mapping = loadMapping (obj.getClass (), mappingFile);
try
{p> XMLSerializer serializer = new XMLSerializer (os, new OutputFormat ( Method.XML, encoding, true));
Marshaller marshaller = new Marshaller (serializer);
marshaller.setMapping (mapping);
marshaller.marshal (obj);
} p> finally {os.flush ();}
}
Для завантаження файлів маппінга в цих прикладах можна використовувати такий код:
private static Mapping loadMapping (Class cls, String mappingFile)
throws Exception
{
ClassLoader loader = cls.getClassLoader ();
В
Mapping mapping = new Mapping (loader);
mapping.loadMapping (new InputSource (loader.getResourceAsStream (mappingFile)));
return mapping;
}
XSL
Специфікація XSL описує стандарт на перетворення XML-документів. Коли за допомогою XSL виконується перетворення з одного XML-документа в інший, особливих причин для занепокоєння немає - і той і інший є Unicode-документами, тому немає перетворень із символів в байти і назад, що можуть вплинути на результат. Інша справа, коли виконується перетворення з XML в HTML або взагалі в текстовий файл. Формат вихідного файлу задається налаштуванням тега xsl: output, в якому можна задати використовувану кодування....